https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85345
Bug ID: 85345
Summary: Missing ENDBR in IFUNC resolver
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: igor.v.tsimbalist at intel dot com
Blocks: 81652
Target Milestone: ---
Target: x86_64-*-*, i?86-*-*
[hjl@gnu-cet-1 gcc]$ /export/build/gnu/gcc-cet/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc-cet/build-x86_64-linux/gcc/
/export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.target/i386/pr81128.c
-fcf-protection -mcet
-B/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/
-B/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/mpxrt
-L/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/mpxrt/.libs
-B/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/
-B/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/mpxwrap
-L/export/build/gnu/gcc-cet/build-x86_64-linux/x86_64-pc-linux-gnu/./libmpx/mpxwrap/.libs
-fno-diagnostics-show-caret -fdiagnostics-color=never -O3 -g
[hjl@gnu-cet-1 gcc]$ gdb a.out
GNU gdb (GDB) Fedora 8.1-11.fc28
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from a.out...done.
(gdb) r
Starting program:
/export/build/gnu/gcc-cet/build-x86_64-linux/gcc/testsuite/gcc/a.out
Missing separate debuginfos, use: dnf debuginfo-install
glibc-2.27-8.4.fc28.x86_64
Program received signal SIGSEGV, Segmentation fault.
resolve_do_it_right_at_runtime ()
at
/export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.target/i386/pr81128.c:33
33 srand (time (NULL));
(gdb) bt
#0 resolve_do_it_right_at_runtime ()
at
/export/gnu/import/git/sources/gcc/gcc/testsuite/gcc.target/i386/pr81128.c:33
#1 0x00007ffff7ea01c8 in _dl_relocate_object ()
from /lib64/ld-linux-x86-64.so.2
#2 0x00007ffff7e9848f in dl_main () from /lib64/ld-linux-x86-64.so.2
#3 0x00007ffff7eada2f in _dl_sysdep_start () from /lib64/ld-linux-x86-64.so.2
#4 0x00007ffff7e961b8 in _dl_start () from /lib64/ld-linux-x86-64.so.2
#5 0x00007ffff7e95108 in _start () from /lib64/ld-linux-x86-64.so.2
#6 0x0000000000000001 in ?? ()
#7 0x00007fffffffda3c in ?? ()
#8 0x0000000000000000 in ?? ()
(gdb) disass
Dump of assembler code for function resolve_do_it_right_at_runtime:
=> 0x0000000000401220 <+0>: sub $0x8,%rsp <<< Missing ENDBR
0x0000000000401224 <+4>: xor %edi,%edi
0x0000000000401226 <+6>: callq 0x4010a0 <time@plt>
0x000000000040122b <+11>: mov %eax,%edi
0x000000000040122d <+13>: callq 0x401090 <srand@plt>
0x0000000000401232 <+18>: callq 0x4010b0 <rand@plt>
0x0000000000401237 <+23>: addl $0x1,0x2e1a(%rip) # 0x404058
<resolver_fn>
0x000000000040123e <+30>: mov $0x401260,%edx
0x0000000000401243 <+35>: test $0x1,%al
0x0000000000401245 <+37>: mov $0x401210,%eax
0x000000000040124a <+42>: cmove %rdx,%rax
0x000000000040124e <+46>: add $0x8,%rsp
0x0000000000401252 <+50>: retq
End of assembler dump.
(gdb)
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81652
[Bug 81652] [meta-bug] -fcf-protection=full -mcet bugs