[NDS32] Add a function to indentify if FUNC is an interrupt service routine.
authorChung-Ju Wu <jasonwucj@gmail.com>
Wed, 3 Sep 2014 08:50:14 +0000 (08:50 +0000)
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>
Wed, 3 Sep 2014 08:50:14 +0000 (08:50 +0000)
* config/nds32/nds32-isr.c (nds32_isr_function_p): Define new function
to check if FUNC is an interrupt service routine.
* config/nds32/nds32-protos.h (nds32_isr_function_p): Declaration.

From-SVN: r214855

gcc/ChangeLog
gcc/config/nds32/nds32-isr.c
gcc/config/nds32/nds32-protos.h

index f9c795dbdc26eef4c6e2014716ff398c80c2cc02..aa65d6a890a494ddd62e15eac46d9acb475186a0 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-03  Chung-Ju Wu  <jasonwucj@gmail.com>
+
+       * config/nds32/nds32-isr.c (nds32_isr_function_p): Define new function
+       to check if FUNC is an interrupt service routine.
+       * config/nds32/nds32-protos.h (nds32_isr_function_p): Declaration.
+
 2014-09-03  Chung-Ju Wu  <jasonwucj@gmail.com>
 
        * config/nds32/nds32.h (machine_function): Add some fields for variadic
index ef0187c39cf9eabb3d9aeea4a24a8c5cdb53bc9b..bb8fcdd75614da7b8a4bc523d4ee65a4453c510f 100644 (file)
@@ -574,4 +574,28 @@ nds32_asm_file_end_for_isr (void)
     }
 }
 
+/* Return true if FUNC is a isr function.  */
+bool
+nds32_isr_function_p (tree func)
+{
+  tree t_intr;
+  tree t_excp;
+  tree t_reset;
+
+  tree attrs;
+
+  if (TREE_CODE (func) != FUNCTION_DECL)
+    abort ();
+
+  attrs = DECL_ATTRIBUTES (func);
+
+  t_intr  = lookup_attribute ("interrupt", attrs);
+  t_excp  = lookup_attribute ("exception", attrs);
+  t_reset = lookup_attribute ("reset", attrs);
+
+  return ((t_intr != NULL_TREE)
+         || (t_excp != NULL_TREE)
+         || (t_reset != NULL_TREE));
+}
+
 /* ------------------------------------------------------------------------ */
index e2810163ec94bbe95eb1afd1392a428561860d2b..e57674a83114207bd78e12446bfb16616ed457bf 100644 (file)
@@ -136,6 +136,7 @@ extern void nds32_check_isr_attrs_conflict (tree, tree);
 extern void nds32_construct_isr_vectors_information (tree, const char *);
 extern void nds32_asm_file_start_for_isr (void);
 extern void nds32_asm_file_end_for_isr (void);
+extern bool nds32_isr_function_p (tree);
 
 /* Auxiliary functions for cost calculation.  */