diff mbox

[AVR] : PR42240 - Fix epilogue of naked functions

Message ID 4D63C3D4.1080000@gjlay.de
State New
Headers show

Commit Message

Georg-Johann Lay Feb. 22, 2011, 2:10 p.m. UTC
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.

Comments

Georg-Johann Lay Feb. 23, 2011, 1:50 p.m. UTC | #1
Georg-Johann Lay schrieb:

> 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.

There is a typo in the changelog's date stamp. It should read
2011-02-22  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.

Johann
Georg-Johann Lay Feb. 26, 2011, 12:56 p.m. UTC | #2
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.  */
>
Denis Chertykov Feb. 27, 2011, 8:37 a.m. UTC | #3
2011/2/26 Georg-Johann Lay <avr@gjlay.de>:
> 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.
>>

Applied.

Denis.
diff mbox

Patch

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.  */