Revert "rs6000: Avoid -fpatchable-function-entry* regressions on powerpc64 be [PR98125]"

Message ID 7409663f10a5873f9e30bc6dddd03d9872258368.1620345816.git.amodra@gmail.com
State New
Headers show
Series
  • Revert "rs6000: Avoid -fpatchable-function-entry* regressions on powerpc64 be [PR98125]"
Related show

Commit Message

This reverts commit b680b9049737198d010e49cf434704c6a6ed2b3f now
that the PowerPC64 ELFv1 regression is fixed properly.

	PR testsuite/98125
	* targhooks.h (default_print_patchable_function_entry_1): Delete.
	* targhooks.c (default_print_patchable_function_entry_1): Delete.
	(default_print_patchable_function_entry): Expand above.
	* config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):
	Don't define.
	(rs6000_print_patchable_function_entry): Delete.
	* testsuite/g++.dg/pr93195a.C: Revert 2021-04-03 change.

Comments

On Fri, 2021-05-07 at 12:19 +0930, Alan Modra via Gcc-patches wrote:
> This reverts commit b680b9049737198d010e49cf434704c6a6ed2b3f now

> that the PowerPC64 ELFv1 regression is fixed properly.

> 

Hi,

Ok.  looks like that was initially handled by Jakub, on copy, good. :-)

Contents below appear to match that commit, reversed.
lgtm,
thanks
-Will


> 	PR testsuite/98125

> 	* targhooks.h (default_print_patchable_function_entry_1): Delete.

> 	* targhooks.c (default_print_patchable_function_entry_1): Delete.

> 	(default_print_patchable_function_entry): Expand above.

> 	* config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY):

> 	Don't define.

> 	(rs6000_print_patchable_function_entry): Delete.

> 	* testsuite/g++.dg/pr93195a.C: Revert 2021-04-03 change.

> 

> diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c

> index 663eed4f055..d43c36e7f1a 100644

> --- a/gcc/config/rs6000/rs6000.c

> +++ b/gcc/config/rs6000/rs6000.c

> @@ -1362,10 +1362,6 @@ static const struct attribute_spec rs6000_attribute_table[] =

>  #define TARGET_ASM_ASSEMBLE_VISIBILITY rs6000_assemble_visibility

>  #endif

> 

> -#undef TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY

> -#define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY \

> -  rs6000_print_patchable_function_entry

> -

>  #undef TARGET_SET_UP_BY_PROLOGUE

>  #define TARGET_SET_UP_BY_PROLOGUE rs6000_set_up_by_prologue

> 

> @@ -14957,30 +14953,6 @@ rs6000_assemble_visibility (tree decl, int vis)

>  }

>  #endif

>  

> -/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function

> -   entry.  If RECORD_P is true and the target supports named sections,

> -   the location of the NOPs will be recorded in a special object section

> -   called "__patchable_function_entries".  This routine may be called

> -   twice per function to put NOPs before and after the function

> -   entry.  */

> -

> -void

> -rs6000_print_patchable_function_entry (FILE *file,

> -				       unsigned HOST_WIDE_INT patch_area_size,

> -				       bool record_p)

> -{

> -  unsigned int flags = SECTION_WRITE | SECTION_RELRO;

> -  /* When .opd section is emitted, the function symbol

> -     default_print_patchable_function_entry_1 is emitted into the .opd section

> -     while the patchable area is emitted into the function section.

> -     Don't use SECTION_LINK_ORDER in that case.  */

> -  if (!(TARGET_64BIT && DEFAULT_ABI != ABI_ELFv2)

> -      && HAVE_GAS_SECTION_LINK_ORDER)

> -    flags |= SECTION_LINK_ORDER;

> -  default_print_patchable_function_entry_1 (file, patch_area_size, record_p,

> -					    flags);

> -}

> -

>  enum rtx_code

>  rs6000_reverse_condition (machine_mode mode, enum rtx_code code)

>  {

> diff --git a/gcc/targhooks.c b/gcc/targhooks.c

> index 952fad422eb..d69c9a2d819 100644

> --- a/gcc/targhooks.c

> +++ b/gcc/targhooks.c

> @@ -1832,15 +1832,17 @@ default_compare_by_pieces_branch_ratio (machine_mode)

>    return 1;

>  }

> 

> -/* Helper for default_print_patchable_function_entry and other

> -   print_patchable_function_entry hook implementations.  */

> +/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function

> +   entry.  If RECORD_P is true and the target supports named sections,

> +   the location of the NOPs will be recorded in a special object section

> +   called "__patchable_function_entries".  This routine may be called

> +   twice per function to put NOPs before and after the function

> +   entry.  */

> 

>  void

> -default_print_patchable_function_entry_1 (FILE *file,

> -					  unsigned HOST_WIDE_INT

> -					  patch_area_size,

> -					  bool record_p,

> -					  unsigned int flags)

> +default_print_patchable_function_entry (FILE *file,

> +					unsigned HOST_WIDE_INT patch_area_size,

> +					bool record_p)

>  {

>    const char *nop_templ = 0;

>    int code_num;

> @@ -1862,6 +1864,9 @@ default_print_patchable_function_entry_1 (FILE *file,

>        patch_area_number++;

>        ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);

> 

> +      unsigned int flags = SECTION_WRITE | SECTION_RELRO;

> +      if (HAVE_GAS_SECTION_LINK_ORDER)

> +	flags |= SECTION_LINK_ORDER;

>        switch_to_section (get_section ("__patchable_function_entries",

>  				      flags, current_function_decl));

>        assemble_align (POINTER_SIZE);

> @@ -1878,25 +1883,6 @@ default_print_patchable_function_entry_1 (FILE *file,

>      output_asm_insn (nop_templ, NULL);

>  }

> 

> -/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function

> -   entry.  If RECORD_P is true and the target supports named sections,

> -   the location of the NOPs will be recorded in a special object section

> -   called "__patchable_function_entries".  This routine may be called

> -   twice per function to put NOPs before and after the function

> -   entry.  */

> -

> -void

> -default_print_patchable_function_entry (FILE *file,

> -					unsigned HOST_WIDE_INT patch_area_size,

> -					bool record_p)

> -{

> -  unsigned int flags = SECTION_WRITE | SECTION_RELRO;

> -  if (HAVE_GAS_SECTION_LINK_ORDER)

> -    flags |= SECTION_LINK_ORDER;

> -  default_print_patchable_function_entry_1 (file, patch_area_size, record_p,

> -					    flags);

> -}

> -

>  bool

>  default_profile_before_prologue (void)

>  {

> diff --git a/gcc/targhooks.h b/gcc/targhooks.h

> index 9928d064abd..39a6f82f143 100644

> --- a/gcc/targhooks.h

> +++ b/gcc/targhooks.h

> @@ -230,9 +230,6 @@ extern bool default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT,

>  						    bool);

>  extern int default_compare_by_pieces_branch_ratio (machine_mode);

> 

> -extern void default_print_patchable_function_entry_1 (FILE *,

> -						      unsigned HOST_WIDE_INT,

> -						      bool, unsigned int);

>  extern void default_print_patchable_function_entry (FILE *,

>  						    unsigned HOST_WIDE_INT,

>  						    bool);

> diff --git a/gcc/testsuite/g++.dg/pr93195a.C b/gcc/testsuite/g++.dg/pr93195a.C

> index b14f1b3e341..26d265da74e 100644

> --- a/gcc/testsuite/g++.dg/pr93195a.C

> +++ b/gcc/testsuite/g++.dg/pr93195a.C

> @@ -1,5 +1,4 @@

>  /* { dg-do link { target { ! { nvptx*-*-* visium-*-* } } } } */

> -/* { dg-skip-if "not supported" { { powerpc*-*-* } && lp64 } } */

>  // { dg-require-effective-target o_flag_in_section }

>  /* { dg-options "-O0 -fpatchable-function-entry=1" } */

>  /* { dg-additional-options "-fno-pie" { target sparc*-*-* } } */
Segher Boessenkool May 8, 2021, 12:05 a.m. | #2
On Fri, May 07, 2021 at 12:19:51PM +0930, Alan Modra wrote:
> This reverts commit b680b9049737198d010e49cf434704c6a6ed2b3f now

> that the PowerPC64 ELFv1 regression is fixed properly.


This is okay when the rest goes in.  Do it in a bisectable order if
possible?  If that is easy :-)


Segher

Patch

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 663eed4f055..d43c36e7f1a 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1362,10 +1362,6 @@  static const struct attribute_spec rs6000_attribute_table[] =
 #define TARGET_ASM_ASSEMBLE_VISIBILITY rs6000_assemble_visibility
 #endif
 
-#undef TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY
-#define TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY \
-  rs6000_print_patchable_function_entry
-
 #undef TARGET_SET_UP_BY_PROLOGUE
 #define TARGET_SET_UP_BY_PROLOGUE rs6000_set_up_by_prologue
 
@@ -14957,30 +14953,6 @@  rs6000_assemble_visibility (tree decl, int vis)
 }
 #endif
 
-/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
-   entry.  If RECORD_P is true and the target supports named sections,
-   the location of the NOPs will be recorded in a special object section
-   called "__patchable_function_entries".  This routine may be called
-   twice per function to put NOPs before and after the function
-   entry.  */
-
-void
-rs6000_print_patchable_function_entry (FILE *file,
-				       unsigned HOST_WIDE_INT patch_area_size,
-				       bool record_p)
-{
-  unsigned int flags = SECTION_WRITE | SECTION_RELRO;
-  /* When .opd section is emitted, the function symbol
-     default_print_patchable_function_entry_1 is emitted into the .opd section
-     while the patchable area is emitted into the function section.
-     Don't use SECTION_LINK_ORDER in that case.  */
-  if (!(TARGET_64BIT && DEFAULT_ABI != ABI_ELFv2)
-      && HAVE_GAS_SECTION_LINK_ORDER)
-    flags |= SECTION_LINK_ORDER;
-  default_print_patchable_function_entry_1 (file, patch_area_size, record_p,
-					    flags);
-}
-
 enum rtx_code
 rs6000_reverse_condition (machine_mode mode, enum rtx_code code)
 {
diff --git a/gcc/targhooks.c b/gcc/targhooks.c
index 952fad422eb..d69c9a2d819 100644
--- a/gcc/targhooks.c
+++ b/gcc/targhooks.c
@@ -1832,15 +1832,17 @@  default_compare_by_pieces_branch_ratio (machine_mode)
   return 1;
 }
 
-/* Helper for default_print_patchable_function_entry and other
-   print_patchable_function_entry hook implementations.  */
+/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
+   entry.  If RECORD_P is true and the target supports named sections,
+   the location of the NOPs will be recorded in a special object section
+   called "__patchable_function_entries".  This routine may be called
+   twice per function to put NOPs before and after the function
+   entry.  */
 
 void
-default_print_patchable_function_entry_1 (FILE *file,
-					  unsigned HOST_WIDE_INT
-					  patch_area_size,
-					  bool record_p,
-					  unsigned int flags)
+default_print_patchable_function_entry (FILE *file,
+					unsigned HOST_WIDE_INT patch_area_size,
+					bool record_p)
 {
   const char *nop_templ = 0;
   int code_num;
@@ -1862,6 +1864,9 @@  default_print_patchable_function_entry_1 (FILE *file,
       patch_area_number++;
       ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number);
 
+      unsigned int flags = SECTION_WRITE | SECTION_RELRO;
+      if (HAVE_GAS_SECTION_LINK_ORDER)
+	flags |= SECTION_LINK_ORDER;
       switch_to_section (get_section ("__patchable_function_entries",
 				      flags, current_function_decl));
       assemble_align (POINTER_SIZE);
@@ -1878,25 +1883,6 @@  default_print_patchable_function_entry_1 (FILE *file,
     output_asm_insn (nop_templ, NULL);
 }
 
-/* Write PATCH_AREA_SIZE NOPs into the asm outfile FILE around a function
-   entry.  If RECORD_P is true and the target supports named sections,
-   the location of the NOPs will be recorded in a special object section
-   called "__patchable_function_entries".  This routine may be called
-   twice per function to put NOPs before and after the function
-   entry.  */
-
-void
-default_print_patchable_function_entry (FILE *file,
-					unsigned HOST_WIDE_INT patch_area_size,
-					bool record_p)
-{
-  unsigned int flags = SECTION_WRITE | SECTION_RELRO;
-  if (HAVE_GAS_SECTION_LINK_ORDER)
-    flags |= SECTION_LINK_ORDER;
-  default_print_patchable_function_entry_1 (file, patch_area_size, record_p,
-					    flags);
-}
-
 bool
 default_profile_before_prologue (void)
 {
diff --git a/gcc/targhooks.h b/gcc/targhooks.h
index 9928d064abd..39a6f82f143 100644
--- a/gcc/targhooks.h
+++ b/gcc/targhooks.h
@@ -230,9 +230,6 @@  extern bool default_use_by_pieces_infrastructure_p (unsigned HOST_WIDE_INT,
 						    bool);
 extern int default_compare_by_pieces_branch_ratio (machine_mode);
 
-extern void default_print_patchable_function_entry_1 (FILE *,
-						      unsigned HOST_WIDE_INT,
-						      bool, unsigned int);
 extern void default_print_patchable_function_entry (FILE *,
 						    unsigned HOST_WIDE_INT,
 						    bool);
diff --git a/gcc/testsuite/g++.dg/pr93195a.C b/gcc/testsuite/g++.dg/pr93195a.C
index b14f1b3e341..26d265da74e 100644
--- a/gcc/testsuite/g++.dg/pr93195a.C
+++ b/gcc/testsuite/g++.dg/pr93195a.C
@@ -1,5 +1,4 @@ 
 /* { dg-do link { target { ! { nvptx*-*-* visium-*-* } } } } */
-/* { dg-skip-if "not supported" { { powerpc*-*-* } && lp64 } } */
 // { dg-require-effective-target o_flag_in_section }
 /* { dg-options "-O0 -fpatchable-function-entry=1" } */
 /* { dg-additional-options "-fno-pie" { target sparc*-*-* } } */