Linux/i386: Remove SUBTARGET_FRAME_POINTER_REQUIRED
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 12 Jun 2020 12:44:59 +0000 (05:44 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 26 Jun 2020 22:17:49 +0000 (15:17 -0700)
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
gcc/config/i386/i386.c

index ae4aa844f0242d9aedbf8598d96f39ea33586331..6ec5a114270c1b67b77f512142df02ddd3eadc25 100644 (file)
@@ -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"
  
index 37aaa49996d0113db0061e985e1b818893932ba3..5c373c091ce82d6563de0834e90f0b760286af7a 100644 (file)
@@ -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;