[Bug target/85044] ENDBR is missing in ix86_trampoline_init
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Mar 23 00:00:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85044
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> ---
[hjl@gnu-cfl-1 tmp]$ cat y.c
extern void foo (void);
extern void bar (void);
extern void callme (void *);
void
tryme (void)
{
int ok = 0;
void callback (void) { ok = 1; }
callme (&callback);
if (ok)
foo ();
else
bar ();
}
[hjl@gnu-cfl-1 tmp]$ /usr/gcc-8.0.1-x32/bin/gcc -O2 -fPIC -S -fcf-protection
-mcet y.c
[hjl@gnu-cfl-1 tmp]$ cat y.s
.file "y.c"
.text
.p2align 4,,15
.type callback.1980, @function
callback.1980:
.LFB1:
.cfi_startproc
endbr64
movl $1, (%r10)
ret
.cfi_endproc
.LFE1:
.size callback.1980, .-callback.1980
.p2align 4,,15
.globl tryme
.type tryme, @function
tryme:
.LFB0:
.cfi_startproc
endbr64
subq $56, %rsp
.cfi_def_cfa_offset 64
movl $-17591, %edx
movl $-17847, %ecx
leaq 64(%rsp), %rax
movw %dx, 4(%rsp)
leaq callback.1980(%rip), %rdx
movq %rax, 32(%rsp)
movq %rsp, %rax
leaq 4(%rax), %rdi
movq %rdx, 2(%rdi)
movw %cx, 10(%rdi)
movq %rax, 12(%rdi)
movl $-1864106167, 20(%rdi)
movl $0, (%rsp)
call callme@PLT
movl (%rsp), %esi
testl %esi, %esi
je .L4
call foo@PLT
addq $56, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L4:
.cfi_restore_state
call bar@PLT
addq $56, %rsp
.cfi_def_cfa_offset 8
ret
.cfi_endproc
.LFE0:
.size tryme, .-tryme
.ident "GCC: (GNU) 8.0.1 20180322 (experimental)"
.section .note.GNU-stack,"x",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 8
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 8
4:
[hjl@gnu-cfl-1 tmp]$
It generates trampoline on stack like
Dump of assembler code from 0x7fffffffddc1 to 0x7fffffffdddf:
=> 0x00007fffffffddc1: 49 bb 80 81 ce f7 fe 7f 00 00 movabs
$0x7ffef7ce8180,%r11
0x00007fffffffddcb: 49 ba c0 dd ff ff ff 7f 00 00 movabs
$0x7fffffffddc0,%r10
0x00007fffffffddd5: 49 ff e3 rex.WB jmpq *%r11
More information about the Gcc-bugs
mailing list