]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386: Skip ENDBR32 at the target function entry
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Feb 2020 11:05:27 +0000 (03:05 -0800)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 20 Feb 2020 11:05:27 +0000 (03:05 -0800)
Skip ENDBR32 at the target function entry when initializing trampoline.

Tested on Linux/x86-64 CET machine with and without -m32.

gcc/

Backport from master
PR target/93656
* config/i386/i386.c (ix86_trampoline_init): Skip ENDBR32 at
the target function entry.

gcc/testsuite/

Backport from master
PR target/93656
* gcc.target/i386/pr93656.c: New test.

(cherry picked from commit 1d69147af203d4dcd2270429f90c93f1a37ddfff)

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr93656.c [new file with mode: 0644]

index 5cad2832d938d20034334dea6273ba1001ecd682..9680a1afb4058f60f3a722c0c575275f95699f4f 100644 (file)
@@ -1,3 +1,12 @@
+2020-02-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from master
+       2020-02-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/93656
+       * config/i386/i386.c (ix86_trampoline_init): Skip ENDBR32 at
+       the target function entry.
+
 2020-02-18  Richard Sandiford  <richard.sandiford@arm.com>
 
        Backport from mainline
index 779e8111379aa0521242330f14830f3e21922b30..1bca5a7eea6ab9accbbf6953f79e8a4da61859e2 100644 (file)
@@ -30289,9 +30289,14 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
         the stack, we need to skip the first insn which pushes the
         (call-saved) register static chain; this push is 1 byte.  */
       offset += 5;
+      int skip = MEM_P (chain) ? 1 : 0;
+      /* Skip ENDBR32 at the entry of the target function.  */
+      if (need_endbr
+         && !cgraph_node::get (fndecl)->only_called_directly_p ())
+       skip += 4;
       disp = expand_binop (SImode, sub_optab, fnaddr,
                           plus_constant (Pmode, XEXP (m_tramp, 0),
-                                         offset - (MEM_P (chain) ? 1 : 0)),
+                                         offset - skip),
                           NULL_RTX, 1, OPTAB_DIRECT);
       emit_move_insn (mem, disp);
     }
index 8c1ce954bf384b3faf1364bf1408d77182075483..9344d00e38a50d33cc9f4024edc414e664e8bc4e 100644 (file)
@@ -1,3 +1,11 @@
+2020-02-20  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from master
+       2020-02-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/93656
+       * gcc.target/i386/pr93656.c: New test.
+
 2020-02-19  Mark Eggleston <markeggleston@gcc.gnu.org>
 
        * typebound_call_22.d03 : Remove xfail clause.
diff --git a/gcc/testsuite/gcc.target/i386/pr93656.c b/gcc/testsuite/gcc.target/i386/pr93656.c
new file mode 100644 (file)
index 0000000..f0ac8c8
--- /dev/null
@@ -0,0 +1,4 @@
+/* { dg-do run { target { ia32 && cet } } } */
+/* { dg-options "-O2 -fcf-protection" } */
+
+#include "pr67770.c"