Commit b3125625 by Jozef Lawrynowicz Committed by Nick Clifton

re PR target/78838 (msp430 option -mcode-region=either, -ffunction-sections, and…

re PR target/78838 (msp430 option -mcode-region=either, -ffunction-sections, and interrupt function attributes cause incorrect section to be created)

	PR target/78838
gcc	* config/msp430/msp430.c (gen_prefix): Return NULL when section name is
	.lowtext.
	(has_section_name): New function.

testsuite * gcc.target/msp430/interrupt_fn_placement.c: New test.

From-SVN: r248674
parent b2deed12
2017-05-30 Jozef Lawrynowicz <jozef.l@somniumtech.com>
PR target/78838
* config/msp430/msp430.c (gen_prefix): Return NULL when section name is
.lowtext.
(has_section_name): New function.
2017-05-30 Martin Liska <mliska@suse.cz>
PR other/80909
......
......@@ -1818,6 +1818,15 @@ is_critical_func (tree decl = current_function_decl)
return has_attr (ATTR_CRIT, decl);
}
static bool
has_section_name (const char * name, tree decl = current_function_decl)
{
if (decl == NULL_TREE)
return false;
return (DECL_SECTION_NAME (decl)
&& (strcmp (name, DECL_SECTION_NAME (decl)) == 0));
}
#undef TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS
#define TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS msp430_allocate_stack_slots_for_args
......@@ -2167,6 +2176,12 @@ gen_prefix (tree decl)
if (has_attr ("section", decl))
return NULL;
/* If the function has been put in the .lowtext section (because it is an
interrupt handler, and the large memory model is used), then do not add
any prefixes. */
if (has_section_name (".lowtext", decl))
return NULL;
/* If the object has __attribute__((lower)) then use the ".lower." prefix. */
if (has_attr (ATTR_LOWER, decl))
return lower_prefix;
......
2017-05-30 Jozef Lawrynowicz <jozef.l@somniumtech.com>
PR target/78838
* gcc.target/msp430/interrupt_fn_placement.c: New test.
2017-05-30 Richard Biener <rguenther@suse.de>
PR middle-end/80876
......
/* { dg-do compile } */
/* { dg-options "-mlarge -mcode-region=either -ffunction-sections" } */
/* { dg-final { scan-assembler-not "\\.either\\.lowtext" } } */
void __attribute__ ((interrupt (2))) ir_1 (void)
{
while (1);
}
int main (void)
{
while (1);
}
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