msp430.c (msp430_attr): Warn when the critical and interrupt function attributes are used together.
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com> gcc/ChangeLog: * config/msp430/msp430.c (msp430_attr): Warn when the critical and interrupt function attributes are used together. * gcc/doc/extend.texi: Update documentation on the critical attribute. gcc/testsuite/ChangeLog: * gcc.target/msp430/critical-interrupt.c: New test. From-SVN: r267467
This commit is contained in:
parent
74ee24e23e
commit
600845521e
@ -1,7 +1,13 @@
|
||||
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
* config/msp430/msp430.c (msp430_attr): Warn when the critical and
|
||||
interrupt function attributes are used together.
|
||||
* gcc/doc/extend.texi: Update documentation on the critical attribute.
|
||||
|
||||
2018-12-29 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
* config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define
|
||||
d_target_objs.
|
||||
* config.gcc (hppa*64*-*-linux*): Add pa/t-pa to tmake_file. Define
|
||||
d_target_objs.
|
||||
(hppa*-*-openbsd*): Likewise.
|
||||
(hppa[12]*-*-hpux10*): Likewise.
|
||||
(hppa*64*-*-hpux11*): Likewise.
|
||||
|
@ -1946,6 +1946,13 @@ msp430_attr (tree * node,
|
||||
TREE_USED (* node) = 1;
|
||||
DECL_PRESERVE_P (* node) = 1;
|
||||
}
|
||||
if (is_critical_func (* node))
|
||||
{
|
||||
warning (OPT_Wattributes,
|
||||
"critical attribute has no effect on interrupt functions");
|
||||
DECL_ATTRIBUTES (*node) = remove_attribute (ATTR_CRIT,
|
||||
DECL_ATTRIBUTES (* node));
|
||||
}
|
||||
}
|
||||
else if (TREE_NAME_EQ (name, ATTR_REENT))
|
||||
{
|
||||
@ -1960,6 +1967,8 @@ msp430_attr (tree * node,
|
||||
message = "naked functions cannot be critical";
|
||||
else if (is_reentrant_func (* node))
|
||||
message = "reentrant functions cannot be critical";
|
||||
else if (is_interrupt_func ( *node))
|
||||
message = "critical attribute has no effect on interrupt functions";
|
||||
}
|
||||
else if (TREE_NAME_EQ (name, ATTR_NAKED))
|
||||
{
|
||||
|
@ -4978,8 +4978,12 @@ These function attributes are supported by the MSP430 back end:
|
||||
@cindex @code{critical} function attribute, MSP430
|
||||
Critical functions disable interrupts upon entry and restore the
|
||||
previous interrupt state upon exit. Critical functions cannot also
|
||||
have the @code{naked} or @code{reentrant} attributes. They can have
|
||||
the @code{interrupt} attribute.
|
||||
have the @code{naked}, @code{reentrant} or @code{interrupt} attributes.
|
||||
|
||||
The MSP430 hardware ensures that interrupts are disabled on entry to
|
||||
@code{interrupt} functions, and restores the previous interrupt state
|
||||
on exit. The @code{critical} attribute is therefore redundant on
|
||||
@code{interrupt} functions.
|
||||
|
||||
@item interrupt
|
||||
@cindex @code{interrupt} function attribute, MSP430
|
||||
|
@ -1,3 +1,7 @@
|
||||
2018-12-29 Jozef Lawrynowicz <jozef.l@mittosystems.com>
|
||||
|
||||
* gcc.target/msp430/critical-interrupt.c: New test.
|
||||
|
||||
2018-12-29 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/88342
|
||||
|
12
gcc/testsuite/gcc.target/msp430/critical-interrupt.c
Normal file
12
gcc/testsuite/gcc.target/msp430/critical-interrupt.c
Normal file
@ -0,0 +1,12 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-final { scan-assembler-not "attributes.*critical" } } */
|
||||
|
||||
void __attribute__((interrupt,critical))
|
||||
fn1 (void)
|
||||
{ /* { dg-warning "critical attribute has no effect on interrupt functions" } */
|
||||
}
|
||||
|
||||
void __attribute__((critical,interrupt))
|
||||
fn2 (void)
|
||||
{ /* { dg-warning "critical attribute has no effect on interrupt functions" } */
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user