From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id A691F386181F; Tue, 30 Mar 2021 14:10:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A691F386181F From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug testsuite/98125] [11 Regression] New test case g++.dg/pr93195a.C in r11-5656 has excess errors Date: Tue, 30 Mar 2021 14:10:27 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: testsuite X-Bugzilla-Version: 11.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P1 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: 11.0 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Mar 2021 14:10:27 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D98125 --- Comment #18 from Jakub Jelinek --- Another more targeted partial reversion: 2021-03-30 Jakub Jelinek * targhooks.h (default_print_patchable_function_entry_1): Declare. * targhooks.c (default_print_patchable_function_entry_1): New funct= ion, copied from default_print_patchable_function_entry with an added fl= ags argument. (default_print_patchable_function_entry): Rewritten into a small wrapper around default_print_patchable_function_entry_1. * config/rs6000/rs6000.c (TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY= ): Redefine. (rs6000_print_patchable_function_entry): New function. --- gcc/targhooks.h.jj 2021-01-04 10:25:39.665224403 +0100 +++ gcc/targhooks.h 2021-03-30 15:48:42.826706369 +0200 @@ -230,6 +230,9 @@ extern bool default_use_by_pieces_infras bool); extern int default_compare_by_pieces_branch_ratio (machine_mode); +extern void default_print_patchable_function_entry_1 (FILE *, + unsigned HOST_WIDE_IN= T, + bool, unsigned int); extern void default_print_patchable_function_entry (FILE *, unsigned HOST_WIDE_INT, bool); --- gcc/targhooks.c.jj 2021-01-04 10:25:38.974232228 +0100 +++ gcc/targhooks.c 2021-03-30 15:51:22.924932795 +0200 @@ -1832,17 +1832,15 @@ default_compare_by_pieces_branch_ratio ( return 1; } -/* 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. */ +/* Helper for default_print_patchable_function_entry and other + print_patchable_function_entry hook implementations. */ void -default_print_patchable_function_entry (FILE *file, - unsigned HOST_WIDE_INT patch_area_s= ize, - bool record_p) +default_print_patchable_function_entry_1 (FILE *file, + unsigned HOST_WIDE_INT + patch_area_size, + bool record_p, + unsigned int flags) { const char *nop_templ =3D 0; int code_num; @@ -1864,9 +1862,6 @@ default_print_patchable_function_entry ( patch_area_number++; ASM_GENERATE_INTERNAL_LABEL (buf, "LPFE", patch_area_number); - unsigned int flags =3D SECTION_WRITE | SECTION_RELRO; - if (HAVE_GAS_SECTION_LINK_ORDER) - flags |=3D SECTION_LINK_ORDER; switch_to_section (get_section ("__patchable_function_entries", flags, current_function_decl)); assemble_align (POINTER_SIZE); @@ -1883,6 +1878,25 @@ default_print_patchable_function_entry ( 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_s= ize, + bool record_p) +{ + unsigned int flags =3D SECTION_WRITE | SECTION_RELRO; + if (HAVE_GAS_SECTION_LINK_ORDER) + flags |=3D SECTION_LINK_ORDER; + default_print_patchable_function_entry_1 (file, patch_area_size, record_= p, + flags); +} + bool default_profile_before_prologue (void) { --- gcc/config/rs6000/rs6000.c.jj 2021-03-29 11:15:49.942202792 +0200 +++ gcc/config/rs6000/rs6000.c 2021-03-30 15:59:10.299755166 +0200 @@ -1341,6 +1341,9 @@ static const struct attribute_spec rs600 #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 @@ -14642,6 +14645,30 @@ rs6000_assemble_visibility (tree decl, i } #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_si= ze, + bool record_p) +{ + unsigned int flags =3D SECTION_WRITE | SECTION_RELRO; + /* When .opd section is emitted, the function symbol + default_print_patchable_function_entry_1 is emitted into the .opd sec= tion + while the patchable area is emitted into the function section. + Don't use SECTION_LINK_ORDER in that case. */ + if (!(TARGET_64BIT && DEFAULT_ABI !=3D ABI_ELFv2) + && HAVE_GAS_SECTION_LINK_ORDER) + flags |=3D 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) { This will keep using SHF_LINK_ORDER for e.g. powerpc64-linux -m32 where it seems to work fine, doesn't touch powerpc64le-linux which seems to be broken for other reasons = and not a regression, but will essentially (temporarily) disable SECTION_LINK_ORDER for the case = that regressed, i.e. when rs6000_elf_declare_function_name emits .opd section and the funct= ion symbol in it. This would mean that for GCC11 powerpc64-linux -fpatchable-function-entry* would keep working as before, which means as long as --gc-sections isn't in effect. What exactly should be emitted for .opd and "awo" as the symbol is something I'd defer to Alan and H.J., but with this patch it could be handled for GCC12.=