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
This commit is contained in:
parent
af9e6b7458
commit
7fb80860d6
4 changed files with 82 additions and 1 deletions
|
@ -1,8 +1,20 @@
|
|||
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>
|
||||
|
||||
* config.gcc (*-*-openbsd4.[3-9]|*-*-openbsd[5-9]*): Set
|
||||
default_use_cxa_atexit to yes.
|
||||
|
||||
|
||||
2012-10-03 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/54792
|
||||
|
|
|
@ -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.
|
||||
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
|
||||
|
@ -1288,6 +1323,24 @@ rx_set_current_function (tree fndecl)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -118,3 +118,9 @@ Specifies whether interrupt functions should save and restore the accumulator re
|
|||
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.
|
||||
|
|
|
@ -859,6 +859,7 @@ See RS/6000 and PowerPC Options.
|
|||
-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 @@ command line.
|
|||
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}}
|
||||
|
|
Loading…
Add table
Reference in a new issue