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.
#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"
|| 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;