From 2dcc608618e09c68ed83560f2471a8b2ef52db79 Mon Sep 17 00:00:00 2001 From: Joel Brobecker Date: Thu, 16 Aug 2012 23:54:37 +0000 Subject: [PATCH] inf_ttrace_follow_fork: detach_breakpoints called twice for child. When debugging a program that forks with follow-fork set to follow the parent, we end up calling detach_breakpoints for the child twice. On ia64-hpux, this leads to a warning when trying to remove the breakpoints the second time around, because the ia64 code detects that the address does not point to a breakpoint instruction. gdb/ChangeLog: * inf-ttrace.c (inf_ttrace_follow_fork): When following the parent, only call detach_breakpoints if tts.tts_event == TTEVT_VFORK. --- gdb/ChangeLog | 6 ++++++ gdb/inf-ttrace.c | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3c83d5d8d67..f40d5979646 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2012-08-16 Joel Brobecker + + * inf-ttrace.c (inf_ttrace_follow_fork): When following the + parent, only call detach_breakpoints if tts.tts_event == + TTEVT_VFORK. + 2012-08-16 Joel Brobecker * dwarf2-frame.c (dwarf2_frame_cache): Use diff --git a/gdb/inf-ttrace.c b/gdb/inf-ttrace.c index 2c620d58fe5..ddcbd428b8b 100644 --- a/gdb/inf-ttrace.c +++ b/gdb/inf-ttrace.c @@ -467,7 +467,11 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child) else { inferior_ptid = ptid_build (pid, lwpid, 0); - detach_breakpoints (fpid); + /* Detach any remaining breakpoints in the child. In the case + of fork events, we do not need to do this, because breakpoints + should have already been removed earlier. */ + if (tts.tts_event == TTEVT_VFORK) + detach_breakpoints (fpid); target_terminal_ours (); fprintf_unfiltered (gdb_stdlog, -- 2.30.2