diff options
author | Tom de Vries <tdevries@suse.de> | 2022-05-24 22:41:45 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-05-24 22:41:45 +0200 |
commit | 9e9f0d02b43676c4873567bafd822d77006cb360 (patch) | |
tree | 8519b3af4acd11a3540dc19cb5b134d6853b459f /gas/write.h | |
parent | a0ae328a266d2b01ff640be9277e01592b08971a (diff) | |
download | binutils-9e9f0d02b43676c4873567bafd822d77006cb360.zip binutils-9e9f0d02b43676c4873567bafd822d77006cb360.tar.gz binutils-9e9f0d02b43676c4873567bafd822d77006cb360.tar.bz2 |
[gdb/testsuite] Fix gdb.opt/clobbered-registers-O2.exp with clang
When running test-case gdb.opt/clobbered-registers-O2.exp with clang 12.0.1, I
get:
...
(gdb) run ^M
Starting program: clobbered-registers-O2 ^M
^M
Program received signal SIGSEGV, Segmentation fault.^M
gen_movsd (operand0=<optimized out>, operand1=<optimized out>) at \
clobbered-registers-O2.c:31^M
31 return *start_sequence(operand0, operand1);^M
(gdb) FAIL: gdb.opt/clobbered-registers-O2.exp: runto: run to start_sequence
...
The problem is that the breakpoint in start_sequence doesn't trigger, because:
- the call to start_sequence in gen_movsd is optimized away, despite the
__attribute__((noinline)), so the actual function start_sequence doesn't get
called, and
- the debug info doesn't contain inlined function info, so there's only one
breakpoint location.
Adding noclone and noipa alongside the noinline attribute doesn't fix this.
Adding the clang-specific attribute optnone in start_sequence does, but since
it inhibits all optimization, that's not a preferred solution in a gdb.opt
test-case, and it would work only for clang and not other compilers that
possibly have the same issue.
Fix this by moving functions start_sequence and gen_movsd into their own
files, as a way of trying harder to enforce noinline/noipa/noclone.
Tested on x86_64-linux.
Diffstat (limited to 'gas/write.h')
0 files changed, 0 insertions, 0 deletions