Hi Guys,

  Is there a target specific way to add a flag bit to a function decl ?

  For the RX port I want to be able to mark a function decl for which I
  have issued a warning message.  Unfortunately I could find no easy way
  to do this other than stealing one of the generic bits (no_limit_stack
  in this case).  Is there a proper way to do this ?

  I have attached my current implementation to demonstrate the problem.

Cheers
  Nick

Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c  (revision 192034)
+++ gcc/config/rx/rx.c  (working copy)
@@ -1288,6 +1288,24 @@
       target_reinit ();
     }
 
+  if (current_is_fast_interrupt && rx_warn_multiple_fast_interrupts)
+    {
+      static tree prev_fast_interrupt = NULL_TREE;
+
+      if (prev_fast_interrupt == NULL_TREE)
+       prev_fast_interrupt = fndecl;
+      else if (prev_fast_interrupt != fndecl
+              && ! DECL_NO_LIMIT_STACK (fndecl))
+       {
+         warning (0, "multiple fast interrupt routines seen: %qE and %qE",
+                  fndecl, prev_fast_interrupt);
+         /* FIXME: We use the no_limit_stack bit in the tree_function_decl
+            structure to mark functions for which we have issued this warning.
+            There probably ought to be another way to do this.  */
+         DECL_NO_LIMIT_STACK (fndecl) = 1;
+       }
+    }
+
   rx_previous_fndecl = fndecl;
 }
 
Index: gcc/config/rx/rx.opt
===================================================================
--- gcc/config/rx/rx.opt        (revision 192034)
+++ gcc/config/rx/rx.opt        (working copy)
@@ -118,3 +118,9 @@
 mpid
 Target Mask(PID)
 Enables Position-Independent-Data (PID) mode.
+
+;---------------------------------------------------
+
+mwarn-multiple-fast-interrupts
+Target Report Var(rx_warn_multiple_fast_interrupts) Init(1) Warning
+Warn when multiple, different, fast interrupt handlers are in the compilation 
unit.
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi (revision 192034)
+++ gcc/doc/invoke.texi (working copy)
@@ -859,6 +859,7 @@
 -mmax-constant-size=@gol
 -mint-register=@gol
 -mpid@gol
+-mno-warn-multiple-fast-interrupts@gol
 -msave-acc-in-interrupts}
 
 @emph{S/390 and zSeries Options}
@@ -17875,6 +17876,15 @@
 By default this feature is not enabled.  The default can be restored
 via the @option{-mno-pid} command-line option.
 
+@item -mno-warn-multiple-fast-interrupts
+@itemx -mwarn-multiple-fast-interrupts
+@opindex mno-warn-multiple-fast-interrupts
+@opindex mwarn-multiple-fast-interrupts
+Prevents GCC from issuing a warning message if it finds more than one
+fast interrupt handler when it is compiling a file.  The default is to
+issue a warning for each extra fast interrupt handler found, as the RX
+only supports one such interrupt.
+
 @end table
 
 @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}

Reply via email to