+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
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
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
--- /dev/null
+/* { 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);
+}