i386: Skip ENDBR32 at the target function entry
Skip ENDBR32 at the target function entry when initializing trampoline. Tested on Linux/x86-64 CET machine with and without -m32. gcc/ PR target/93656 * config/i386/i386.c (ix86_trampoline_init): Skip ENDBR32 at the target function entry. gcc/testsuite/ PR target/93656 * gcc.target/i386/pr93656.c: New test.
This commit is contained in:
parent
ac5e8d2fa0
commit
1d69147af2
4 changed files with 21 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
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-13 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* common/config/arc/arc-common.c (arc_option_optimization_table):
|
||||
|
|
|
@ -16839,9 +16839,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);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2020-02-13 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/93656
|
||||
* gcc.target/i386/pr93656.c: New test.
|
||||
|
||||
2020-02-13 Claudiu Zissulescu <claziss@synopsys.com>
|
||||
|
||||
* gcc.target/arc/nps400-1.c: Update test.
|
||||
|
|
4
gcc/testsuite/gcc.target/i386/pr93656.c
Normal file
4
gcc/testsuite/gcc.target/i386/pr93656.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
/* { dg-do run { target { ia32 && cet } } } */
|
||||
/* { dg-options "-O2 -fcf-protection" } */
|
||||
|
||||
#include "pr67770.c"
|
Loading…
Add table
Reference in a new issue