This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, AVR]: PR42240 - Fix epilogue of naked functions


Georg-Johann Lay schrieb:

http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01441.html

The patch implements target hook TARGET_CANNOT_MODIFY_JUMPS_P in order
to inhibit post-reload bb reorder for naked functions.

It's basically the same patch as proposed in bug data base and works
for the test case attached there.

The patch works just as well for gcc-4.5.2. Should I provide a
seperate patch against 4.5.2 (tags/gcc_4_5_2_release) or is this patch
(against trunk) sufficient?

Johann

--

2011-02-11 Georg-Johann Lay <avr@gjlay.de>

	PR target/42240
	* config/avr/avr.c (avr_cannot_modify_jumps_p): New function.
	(TARGET_CANNOT_MODIFY_JUMPS_P): Define.


------------------------------------------------------------------------


Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c (revision 170397)
+++ config/avr/avr.c (working copy)
@@ -73,6 +73,7 @@ static void avr_file_end (void);
static bool avr_legitimate_address_p (enum machine_mode, rtx, bool);
static void avr_asm_function_end_prologue (FILE *);
static void avr_asm_function_begin_epilogue (FILE *);
+static bool avr_cannot_modify_jumps_p (void);
static rtx avr_function_value (const_tree, const_tree, bool);
static void avr_insert_attributes (tree, tree *);
static void avr_asm_init_sections (void);
@@ -217,6 +218,9 @@ static const struct default_options avr_
#undef TARGET_OPTION_OPTIMIZATION_TABLE
#define TARGET_OPTION_OPTIMIZATION_TABLE avr_option_optimization_table
+#undef TARGET_CANNOT_MODIFY_JUMPS_P
+#define TARGET_CANNOT_MODIFY_JUMPS_P avr_cannot_modify_jumps_p
+
struct gcc_target targetm = TARGET_INITIALIZER;

static void
@@ -980,6 +984,27 @@ avr_asm_function_begin_epilogue (FILE *f
fprintf (file, "/* epilogue start */\n");
}
+
+/* Implement TARGET_CANNOT_MODITY_JUMPS_P */
+
+static bool
+avr_cannot_modify_jumps_p (void)
+{
+
+ /* Naked Functions must not have any instructions after
+ their epilogue, see PR42240 */
+ + if (reload_completed
+ && cfun->machine
+ && cfun->machine->is_naked)
+ {
+ return true;
+ }
+
+ return false;
+}
+
+
/* Return nonzero if X (an RTX) is a legitimate memory address on the target
machine for a memory operand of mode MODE. */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]