diff options
author | Tom de Vries <tdevries@suse.de> | 2021-11-02 19:08:49 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-11-02 19:08:49 +0100 |
commit | a50bdb99afe3ce2374407cbe7ddc625c1a0b74f7 (patch) | |
tree | eaa237363bf33d5bcc90fab03cb1037da8c72893 /cpu | |
parent | d74dfa8f63c2bb951609ab671773354536543ac2 (diff) | |
download | gdb-a50bdb99afe3ce2374407cbe7ddc625c1a0b74f7.zip gdb-a50bdb99afe3ce2374407cbe7ddc625c1a0b74f7.tar.gz gdb-a50bdb99afe3ce2374407cbe7ddc625c1a0b74f7.tar.bz2 |
[gdb/tdep, rs6000] Don't skip system call in skip_prologue
I ran into a case where a breakpoint on _exit never triggered, because it was
set past the end of the _exit prologue, past the end of the exit_group system
call (which does not return).
More concretely, the breakpoint was set at the last insn show here:
...
Dump of assembler code for function _exit:
0x00007ffff7e42ea0 <+0>: 12 00 4c 3c addis r2,r12,18
0x00007ffff7e42ea4 <+4>: 60 43 42 38 addi r2,r2,17248
0x00007ffff7e42ea8 <+8>: 00 00 00 60 nop
0x00007ffff7e42eac <+12>: f8 ff e1 fb std r31,-8(r1)
0x00007ffff7e42eb0 <+16>: 78 1b 7f 7c mr r31,r3
0x00007ffff7e42eb4 <+20>: f0 ff c1 fb std r30,-16(r1)
0x00007ffff7e42eb8 <+24>: ea 00 00 38 li r0,234
0x00007ffff7e42ebc <+28>: a0 8b 22 e9 ld r9,-29792(r2)
0x00007ffff7e42ec0 <+32>: 78 fb e3 7f mr r3,r31
0x00007ffff7e42ec4 <+36>: 14 6a c9 7f add r30,r9,r13
0x00007ffff7e42ec8 <+40>: 02 00 00 44 sc
0x00007ffff7e42ecc <+44>: 26 00 00 7c mfcr r0
0x00007ffff7e42ed0 <+48>: 00 10 09 74 andis. r9,r0,4096
...
Fix this by treating system calls the same as branches in skip_prologue:
by default, don't skip, such that the breakpoint is set at 0x00007ffff7e42eb8
instead.
Tested on ppc64le-linux, on a power 8 machine.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28527
Diffstat (limited to 'cpu')
0 files changed, 0 insertions, 0 deletions