[PATCH 0/4] Fix PR gdb/19187 (process record over a fork causes internal error)
Pedro Alves
palves@redhat.com
Sun Feb 14 18:37:00 GMT 2016
This series fixes:
(gdb) record
break marker2
Breakpoint 2 at 0x40067a: file /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.reverse/waitpid-reverse.c, line 30.
(gdb) PASS: gdb.reverse/waitpid-reverse.exp: set breakpoint at marker2
continue
Continuing.
/home/pedro/gdb/mygit/src/gdb/record-full.c:1720: internal-error: record_full_remove_breakpoint: removing unknown breakpoint
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n)
KFAIL: gdb.reverse/waitpid-reverse.exp: continue to breakpoint: marker2 (GDB internal error) (PRMS: gdb/19187)
The problem is that the target side can't distinguish between deleting
a breakpoint and detaching a breakpoint.
Right after a fork is detected, we detach breakpoints from the child
(detach_breakpoints), which calls into target_remove_breakpoint with
inferior_ptid pointing at the child process, but leaves the breakpoint
marked inserted (in the parent).
Since record-full.c's target_remove_breakpoint implementation doesn't
know we're detaching a breakpoint, it removes the breakpoint from its
own breakpoint table.
Then when we later remove the breakpoint from the parent, we fail that
assertion, since the breakpoint is unexpectedly not found in the
record-full.c breakpoint table.
The first three patches pass down the reason for removing the
breakpoint all the way to the target.
Patch 4 then simply makes record-full.c not delete the breakpoint from
its breakpoint table when we're detaching the breakpoint from a fork
child.
Pedro Alves (4):
Simplify remove_breakpoint interface
Introduce 'enum remove_bp_reason'
Plumb enum remove_bp_reason all the way to target_remove_breakpoint
Fix PR gdb/19187 (process record over a fork causes internal error)
gdb/break-catch-sig.c | 3 +-
gdb/break-catch-syscall.c | 2 +-
gdb/breakpoint.c | 70 +++++++++++++--------------
gdb/breakpoint.h | 14 +++++-
gdb/corelow.c | 10 +++-
gdb/exec.c | 10 +++-
gdb/mem-break.c | 3 +-
gdb/record-btrace.c | 6 ++-
gdb/record-full.c | 15 ++++--
gdb/remote.c | 5 +-
gdb/target-debug.h | 2 +
gdb/target-delegates.c | 10 ++--
gdb/target.c | 5 +-
gdb/target.h | 9 ++--
gdb/testsuite/gdb.reverse/waitpid-reverse.exp | 4 +-
15 files changed, 105 insertions(+), 63 deletions(-)
--
1.9.3
More information about the Gdb-patches
mailing list