From 727efd27da90fe09ed393c7bb44bba071ae0e0d3 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 12 Jun 2020 05:44:59 -0700 Subject: [PATCH] Linux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIRED config/i386/gnu-user.h has #define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile ix86_frame_pointer_required() has /* Several x86 os'es need a frame pointer for other reasons, usually pertaining to setjmp. */ if (SUBTARGET_FRAME_POINTER_REQUIRED) return true; ... if (crtl->profile && !flag_fentry) return true; A frame pointer is needed only for -pg, not for -mfentry -pg. Remove SUBTARGET_FRAME_POINTER_REQUIRED from gnu-user.h to make i386 GCC behave the same as x86-64 GCC. This fixes FAIL: gcc.target/i386/pr93492-3.c scan-assembler \t.cfi_startproc\n\tendbr(32|64)\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n FAIL: gcc.target/i386/pr93492-5.c scan-assembler \t.cfi_startproc\n.*.LPFE1:\n\tnop\n1:\tcall\t__fentry__\n\tret\n on Linux/i386. PR target/95655 * config/i386/gnu-user.h (SUBTARGET_FRAME_POINTER_REQUIRED): Removed. * config/i386/i386.c (ix86_frame_pointer_required): Update comments. --- gcc/config/i386/gnu-user.h | 6 ------ gcc/config/i386/i386.c | 2 ++ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/gcc/config/i386/gnu-user.h b/gcc/config/i386/gnu-user.h index ae4aa844f02..6ec5a114270 100644 --- a/gcc/config/i386/gnu-user.h +++ b/gcc/config/i386/gnu-user.h @@ -39,12 +39,6 @@ along with GCC; see the file COPYING3. If not see #undef MCOUNT_NAME #define MCOUNT_NAME "mcount" -/* The GLIBC version of mcount for the x86 assumes that there is a - frame, so we cannot allow profiling without a frame pointer. */ - -#undef SUBTARGET_FRAME_POINTER_REQUIRED -#define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile - #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 37aaa49996d..5c373c091ce 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -5267,6 +5267,8 @@ ix86_frame_pointer_required (void) || ix86_current_function_calls_tls_descriptor)) return true; + /* Several versions of mcount for the x86 assumes that there is a + frame, so we cannot allow profiling without a frame pointer. */ if (crtl->profile && !flag_fentry) return true; -- 2.30.2