Commit 7fb80860 by Nick Clifton Committed by Nick Clifton

rx.c (struct decl_chain): New local structure.

	* config/rx/rx.c (struct decl_chain): New local structure.
	(warned_decls): New local variable.  Contains a stack of decls for
	which warnings have been issued.
	(add_warned_decl): Adds a decl to the stack.
	(already_warned): Returns true if a given decl is on the stack.
	(rx_set_current_function): Issue a warning if multiple fast
	interrupt handlers are defined.
	* config/rx/rx.opt (mwarn-multiple-fast-interrupts): New option.
	* doc/invoke.texi: Document the option.

From-SVN: r192041
parent af9e6b74
2012-10-03 Nick Clifton <nickc@redhat.com>
* config/rx/rx.c (struct decl_chain): New local structure.
(warned_decls): New local variable. Contains a stack of decls for
which warnings have been issued.
(add_warned_decl): Adds a decl to the stack.
(already_warned): Returns true if a given decl is on the stack.
(rx_set_current_function): Issue a warning if multiple fast
interrupt handlers are defined.
* config/rx/rx.opt (mwarn-multiple-fast-interrupts): New option.
* doc/invoke.texi: Document the option.
2012-09-03 Mark Kettenis <kettenis@openbsd.org> 2012-09-03 Mark Kettenis <kettenis@openbsd.org>
* config.gcc (*-*-openbsd4.[3-9]|*-*-openbsd[5-9]*): Set * config.gcc (*-*-openbsd4.[3-9]|*-*-openbsd[5-9]*): Set
default_use_cxa_atexit to yes. default_use_cxa_atexit to yes.
2012-10-03 Jakub Jelinek <jakub@redhat.com> 2012-10-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/54792 PR rtl-optimization/54792
......
...@@ -1256,6 +1256,41 @@ rx_conditional_register_usage (void) ...@@ -1256,6 +1256,41 @@ rx_conditional_register_usage (void)
} }
} }
struct decl_chain
{
tree fndecl;
struct decl_chain * next;
};
/* Stack of decls for which we have issued warnings. */
static struct decl_chain * warned_decls = NULL;
static void
add_warned_decl (tree fndecl)
{
struct decl_chain * warned = (struct decl_chain *) xmalloc (sizeof * warned);
warned->fndecl = fndecl;
warned->next = warned_decls;
warned_decls = warned;
}
/* Returns TRUE if FNDECL is on our list of warned about decls. */
static bool
already_warned (tree fndecl)
{
struct decl_chain * warned;
for (warned = warned_decls;
warned != NULL;
warned = warned->next)
if (warned->fndecl == fndecl)
return true;
return false;
}
/* Perform any actions necessary before starting to compile FNDECL. /* Perform any actions necessary before starting to compile FNDECL.
For the RX we use this to make sure that we have the correct For the RX we use this to make sure that we have the correct
set of register masks selected. If FNDECL is NULL then we are set of register masks selected. If FNDECL is NULL then we are
...@@ -1288,6 +1323,24 @@ rx_set_current_function (tree fndecl) ...@@ -1288,6 +1323,24 @@ rx_set_current_function (tree fndecl)
target_reinit (); target_reinit ();
} }
if (current_is_fast_interrupt && rx_warn_multiple_fast_interrupts)
{
/* We do not warn about the first fast interrupt routine that
we see. Instead we just push it onto the stack. */
if (warned_decls == NULL)
add_warned_decl (fndecl);
/* Otherwise if this fast interrupt is one for which we have
not already issued a warning, generate one and then push
it onto the stack as well. */
else if (! already_warned (fndecl))
{
warning (0, "multiple fast interrupt routines seen: %qE and %qE",
fndecl, warned_decls->fndecl);
add_warned_decl (fndecl);
}
}
rx_previous_fndecl = fndecl; rx_previous_fndecl = fndecl;
} }
......
...@@ -118,3 +118,9 @@ Specifies whether interrupt functions should save and restore the accumulator re ...@@ -118,3 +118,9 @@ Specifies whether interrupt functions should save and restore the accumulator re
mpid mpid
Target Mask(PID) Target Mask(PID)
Enables Position-Independent-Data (PID) mode. 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.
...@@ -859,6 +859,7 @@ See RS/6000 and PowerPC Options. ...@@ -859,6 +859,7 @@ See RS/6000 and PowerPC Options.
-mmax-constant-size=@gol -mmax-constant-size=@gol
-mint-register=@gol -mint-register=@gol
-mpid@gol -mpid@gol
-mno-warn-multiple-fast-interrupts@gol
-msave-acc-in-interrupts} -msave-acc-in-interrupts}
@emph{S/390 and zSeries Options} @emph{S/390 and zSeries Options}
...@@ -17875,6 +17876,15 @@ command line. ...@@ -17875,6 +17876,15 @@ command line.
By default this feature is not enabled. The default can be restored By default this feature is not enabled. The default can be restored
via the @option{-mno-pid} command-line option. 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 @end table
@emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}} @emph{Note:} The generic GCC command-line option @option{-ffixed-@var{reg}}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment