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