summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/breakpoint.c6
-rw-r--r--gdb/breakpoint.h2
-rw-r--r--gdb/inf-ttrace.c4
-rw-r--r--gdb/infrun.c4
-rw-r--r--gdb/linux-nat.c3
6 files changed, 22 insertions, 11 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f40d5979646..f52139f6442 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,19 @@
2012-08-16 Joel Brobecker <brobecker@adacore.com>
+ * breakpoint.h (detach_breakpoints): pid parameter is now a ptid.
+ * breakpoint.c (detach_breakpoints): Change pid parameter into
+ a ptid. Adjust code accordingly.
+ * infrun.c (handle_inferior_event): Delete variable child_pid.
+ Update call to detach_breakpoints to pass the child ptid for
+ fork events.
+ * linux-nat.c (linux_nat_iterate_watchpoint_lwps): Remove
+ assert that inferior_ptid's lwp is zero.
+ (linux_handle_extended_wait): Update call to detach_breakpoints.
+ * inf-ttrace.c (inf_ttrace_follow_fork): Update call to
+ detach_breakpoints.
+
+2012-08-16 Joel Brobecker <brobecker@adacore.com>
+
* inf-ttrace.c (inf_ttrace_follow_fork): When following the
parent, only call detach_breakpoints if tts.tts_event ==
TTEVT_VFORK.
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 7ea5ba6feff..c693d420d5d 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -3500,18 +3500,18 @@ update_breakpoints_after_exec (void)
}
int
-detach_breakpoints (int pid)
+detach_breakpoints (ptid_t ptid)
{
struct bp_location *bl, **blp_tmp;
int val = 0;
struct cleanup *old_chain = save_inferior_ptid ();
struct inferior *inf = current_inferior ();
- if (pid == PIDGET (inferior_ptid))
+ if (PIDGET (ptid) == PIDGET (inferior_ptid))
error (_("Cannot detach breakpoints of inferior_ptid"));
/* Set inferior_ptid; remove_breakpoint_1 uses this global. */
- inferior_ptid = pid_to_ptid (pid);
+ inferior_ptid = ptid;
ALL_BP_LOCATIONS (bl, blp_tmp)
{
if (bl->pspace != inf->pspace)
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index 4e4f875d14c..4c6171f4e46 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1284,7 +1284,7 @@ extern void update_breakpoints_after_exec (void);
It is an error to use this function on the process whose id is
inferior_ptid. */
-extern int detach_breakpoints (int);
+extern int detach_breakpoints (ptid_t ptid);
/* This function is called when program space PSPACE is about to be
deleted. It takes care of updating breakpoints to not reference
diff --git a/gdb/inf-ttrace.c b/gdb/inf-ttrace.c
index ddcbd428b8b..2b9e7f536de 100644
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -457,7 +457,7 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
inf->pspace = parent_inf->pspace;
inf->aspace = parent_inf->aspace;
copy_terminal_info (inf, parent_inf);
- detach_breakpoints (pid);
+ detach_breakpoints (ptid_build (pid, lwpid, 0));
target_terminal_ours ();
fprintf_unfiltered (gdb_stdlog,
@@ -471,7 +471,7 @@ inf_ttrace_follow_fork (struct target_ops *ops, int follow_child)
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);
+ detach_breakpoints (ptid_build (fpid, flwpid, 0));
target_terminal_ours ();
fprintf_unfiltered (gdb_stdlog,
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 666308605af..9628170ba40 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3497,11 +3497,9 @@ handle_inferior_event (struct execution_control_state *ecs)
vfork follow are detached. */
if (ecs->ws.kind != TARGET_WAITKIND_VFORKED)
{
- int child_pid = ptid_get_pid (ecs->ws.value.related_pid);
-
/* This won't actually modify the breakpoint list, but will
physically remove the breakpoints from the child. */
- detach_breakpoints (child_pid);
+ detach_breakpoints (ecs->ws.value.related_pid);
}
if (singlestep_breakpoints_inserted_p)
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 9844b0c4931..35165651455 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -1307,7 +1307,6 @@ linux_nat_iterate_watchpoint_lwps
pid_t child_pid = GET_PID (inferior_ptid);
ptid_t child_ptid = ptid_build (child_pid, child_pid, 0);
- gdb_assert (!is_lwp (inferior_ptid));
gdb_assert (find_lwp_pid (child_ptid) == NULL);
child_lp = add_lwp (child_ptid);
child_lp->stopped = 1;
@@ -2314,7 +2313,7 @@ linux_handle_extended_wait (struct lwp_info *lp, int status,
/* This won't actually modify the breakpoint list, but will
physically remove the breakpoints from the child. */
- detach_breakpoints (new_pid);
+ detach_breakpoints (ptid_build (new_pid, new_pid, 0));
/* Retain child fork in ptrace (stopped) state. */
if (!find_fork_pid (new_pid))