public inbox for gdb-prs@sourceware.org help / color / mirror / Atom feed
* [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call @ 2021-11-02 9:05 vries at gcc dot gnu.org 2021-11-02 9:19 ` [Bug tdep/28527] " vries at gcc dot gnu.org ` (5 more replies) 0 siblings, 6 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 9:05 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 Bug ID: 28527 Summary: [gdb/tdep] powerpc skip_prologue walks past system call Product: gdb Version: HEAD Status: NEW Severity: normal Priority: P2 Component: tdep Assignee: unassigned at sourceware dot org Reporter: vries at gcc dot gnu.org Target Milestone: --- [ As reported here: https://sourceware.org/pipermail/gdb-patches/2021-October/182919.html ] On powerpc64le-linux, I run into: ... [Inferior 1 (process 5156) exited normally]^M (gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process: \ detach: detach: continue to breakpoint: _exit (the program exited) ... What happens is the following: - a breakpoint is set on _exit, - a continue is issued - the continue is supposed to hit the breakpoint, but instead the program exits. I traced this down to the breakpoint on _exit being set too far from function entry. This is caused by the skip_prologue function (in rs6000-tdep.c) optimistically ignoring insns it doesn't recognize. In particular, it walks past the system call instruction "sc" which initiates the actual exit. -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org @ 2021-11-02 9:19 ` vries at gcc dot gnu.org 2021-11-02 10:18 ` vries at gcc dot gnu.org ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 9:19 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 --- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> --- Minimal reproducer: ... $ cat test.c #include <unistd.h> int main (void) { _exit (0); return 0; } ... Compile as: ... $ gcc test.c ... GDB session setup: ... $ gdb -q a.out -ex "b _exit" -ex "b *_exit" -ex run -ex "layout asm" ... The run command stops at the "*_exit" breakpoint, at 0x7ffff7e42ea0: ... ┌─────────────────────────────────────────────────────────────────────────────────────────────────┐ │B+>0x7ffff7e42ea0 <_exit> addis r2,r12,18 │ │ 0x7ffff7e42ea4 <_exit+4> addi r2,r2,17248 │ │ 0x7ffff7e42ea8 <_exit+8> nop │ │ 0x7ffff7e42eac <_exit+12> std r31,-8(r1) │ │ 0x7ffff7e42eb0 <_exit+16> mr r31,r3 │ │ 0x7ffff7e42eb4 <_exit+20> std r30,-16(r1) │ │ 0x7ffff7e42eb8 <_exit+24> li r0,234 │ │ 0x7ffff7e42ebc <_exit+28> ld r9,-29792(r2) │ │ 0x7ffff7e42ec0 <_exit+32> mr r3,r31 │ │ 0x7ffff7e42ec4 <_exit+36> add r30,r9,r13 │ │ 0x7ffff7e42ec8 <_exit+40> sc │ │ 0x7ffff7e42ecc <_exit+44> mfcr r0 │ │b+ 0x7ffff7e42ed0 <_exit+48> andis. r9,r0,4096 │ └─────────────────────────────────────────────────────────────────────────────────────────────────┘ native process 29312 In: _exit L?? PC: 0x7ffff7e42ea0 ... The "_exit" breakpoint is set at 0x7ffff7e42ed0. If we stepi through the rest of the function, the sc insn at 0x7ffff7e42ec8 is the last insn executed, and the inferior exits (which AFAIU is according to spec), obviously not hitting the breakpoint. -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org 2021-11-02 9:19 ` [Bug tdep/28527] " vries at gcc dot gnu.org @ 2021-11-02 10:18 ` vries at gcc dot gnu.org 2021-11-02 10:20 ` vries at gcc dot gnu.org ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 10:18 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 --- Comment #2 from Tom de Vries <vries at gcc dot gnu.org> --- Output of disassemble /r: ... 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 ... -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org 2021-11-02 9:19 ` [Bug tdep/28527] " vries at gcc dot gnu.org 2021-11-02 10:18 ` vries at gcc dot gnu.org @ 2021-11-02 10:20 ` vries at gcc dot gnu.org 2021-11-02 10:28 ` vries at gcc dot gnu.org ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 10:20 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 --- Comment #3 from Tom de Vries <vries at gcc dot gnu.org> --- In opcodes/ppc-opc.c we have: ... {"svc", SC(17,0,0), SC_MASK, POWER, PPCVLE, {SVC_LEV, FL1, FL2}}, {"scv", SC(17,0,1), SC_MASK, POWER9, PPCVLE, {SVC_LEV}}, {"svcl", SC(17,0,1), SC_MASK, POWER, PPCVLE, {SVC_LEV, FL1, FL2}}, {"sc", SC(17,1,0), SC_MASK, PPC, PPCVLE, {LEV}}, {"svca", SC(17,1,0), SC_MASK, PWRCOM, PPCVLE, {SV}}, {"svcla", SC(17,1,1), SC_MASK, POWER, PPCVLE, {SV}}, ... Located here: ... (gdb) p powerpc_opcodes[1258 + 0].name $30 = 0x10fcd4e "svc" (gdb) p powerpc_opcodes[1258 + 5].name $31 = 0x10fcd63 "svcla" ... With values: ... (gdb) p /x powerpc_opcodes[1258 + 0] $32 = {name = 0x10fcd4e, opcode = 0x44000000, mask = 0xffff0003, flags = 0x2, deprecated = 0x800000000, operands = {0x51, 0x3f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0}} (gdb) p /x powerpc_opcodes[1258 + 1] $33 = {name = 0x10fcd52, opcode = 0x44000001, mask = 0xffff0003, flags = 0x10000000000, deprecated = 0x800000000, operands = {0x51, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}} (gdb) p /x powerpc_opcodes[1258 + 2] $34 = {name = 0x10fcd56, opcode = 0x44000001, mask = 0xffff0003, flags = 0x2, deprecated = 0x800000000, operands = {0x51, 0x3f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0}} (gdb) p /x powerpc_opcodes[1258 + 3] $35 = {name = 0x10fcd5b, opcode = 0x44000002, mask = 0xffff0003, flags = 0x1, deprecated = 0x800000000, operands = {0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}} (gdb) p /x powerpc_opcodes[1258 + 4] $36 = {name = 0x10fcd5e, opcode = 0x44000002, mask = 0xffff0003, flags = 0x32, deprecated = 0x800000000, operands = {0x8b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}} (gdb) p /x powerpc_opcodes[1258 + 5] $37 = {name = 0x10fcd63, opcode = 0x44000003, mask = 0xffff0003, flags = 0x2, deprecated = 0x800000000, operands = {0x8b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}} ... -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org ` (2 preceding siblings ...) 2021-11-02 10:20 ` vries at gcc dot gnu.org @ 2021-11-02 10:28 ` vries at gcc dot gnu.org 2021-11-02 11:33 ` vries at gcc dot gnu.org 2021-11-02 18:14 ` vries at gcc dot gnu.org 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 10:28 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 --- Comment #4 from Tom de Vries <vries at gcc dot gnu.org> --- Tentative fix: ... diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 78b4fd1a913..4830ed22593 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -2137,6 +2137,12 @@ skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_ pc, /* Never skip branches. */ break; + /* Test based on opcode and mask values of + powerpc_opcodes[svc..svcla] in opcodes/ppc-opc.c. */ + if ((op & 0xffff0000) == 0x44000000) + /* Never skip system calls. */ + break; + if (num_skip_non_prologue_insns++ > max_skip_non_prologue_insns) /* Do not scan too many insns, scanning insns is expensive with remote targets. */ ... -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org ` (3 preceding siblings ...) 2021-11-02 10:28 ` vries at gcc dot gnu.org @ 2021-11-02 11:33 ` vries at gcc dot gnu.org 2021-11-02 18:14 ` vries at gcc dot gnu.org 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 11:33 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 --- Comment #5 from Tom de Vries <vries at gcc dot gnu.org> --- https://sourceware.org/pipermail/gdb-patches/2021-November/183016.html -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug tdep/28527] [gdb/tdep] powerpc skip_prologue walks past system call 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org ` (4 preceding siblings ...) 2021-11-02 11:33 ` vries at gcc dot gnu.org @ 2021-11-02 18:14 ` vries at gcc dot gnu.org 5 siblings, 0 replies; 7+ messages in thread From: vries at gcc dot gnu.org @ 2021-11-02 18:14 UTC (permalink / raw) To: gdb-prs https://sourceware.org/bugzilla/show_bug.cgi?id=28527 Tom de Vries <vries at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|NEW |RESOLVED Target Milestone|--- |12.1 --- Comment #6 from Tom de Vries <vries at gcc dot gnu.org> --- https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=a50bdb99afe3ce2374407cbe7ddc625c1a0b74f7 -- You are receiving this mail because: You are on the CC list for the bug. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-11-02 18:14 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-11-02 9:05 [Bug tdep/28527] New: [gdb/tdep] powerpc skip_prologue walks past system call vries at gcc dot gnu.org 2021-11-02 9:19 ` [Bug tdep/28527] " vries at gcc dot gnu.org 2021-11-02 10:18 ` vries at gcc dot gnu.org 2021-11-02 10:20 ` vries at gcc dot gnu.org 2021-11-02 10:28 ` vries at gcc dot gnu.org 2021-11-02 11:33 ` vries at gcc dot gnu.org 2021-11-02 18:14 ` vries at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).