[2/4] RFC: actually remove the code

Tom Tromey tromey@redhat.com
Thu Jan 19 20:26:00 GMT 2012


Whoops.  I meant to say in the previous patch that it lays the
groundwork for removing some code from infrun.

This patch also comes from:

    http://sourceware.org/ml/gdb-patches/2011-09/msg00164.html

This patch actually removes the code.  I think this clearly simplifies
the infrun/catchpoint interface.

This patch differs from Pedro's original patch in one way -- I had to
add a line to handle_syscall_event.  Without this I got test failures.
I find this addition maybe mildly hacky.  We have two target_waitstatus
objects here: target_last_waitstatus and the one in 'ecs'.  The approach
I took was to update both, but perhaps another valid approach would be
to only update target_last_waitstatus and pass that down to
bpstat_stop_status.

Tom

2011-09-09  Pedro Alves  <pedro@codesourcery.com>

	gdb/
	* breakpoint.c (breakpoint_hit_catch_fork)
	(breakpoint_hit_catch_vfork, breakpoint_hit_catch_syscall)
	(breakpoint_hit_catch_exec): Make use of the `ws' argument.
	* infrun.c (inferior_has_forked, inferior_has_vforked)
	(inferior_has_execd, inferior_has_called_syscall): Delete.
	(handle_syscall_event): Set syscall_number on the execution
	control state's wait status.
---
 gdb/breakpoint.c |   23 ++++++++++++++---
 gdb/infrun.c     |   74 +-----------------------------------------------------
 2 files changed, 20 insertions(+), 77 deletions(-)

diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 1344d6d..1b43b43 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6237,7 +6237,11 @@ breakpoint_hit_catch_fork (const struct bp_location *bl,
 {
   struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
 
-  return inferior_has_forked (inferior_ptid, &c->forked_inferior_pid);
+  if (ws->kind != TARGET_WAITKIND_FORKED)
+    return 0;
+
+  c->forked_inferior_pid = ws->value.related_pid;
+  return 1;
 }
 
 /* Implement the "print_it" breakpoint_ops method for fork
@@ -6347,7 +6351,11 @@ breakpoint_hit_catch_vfork (const struct bp_location *bl,
 {
   struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
 
-  return inferior_has_vforked (inferior_ptid, &c->forked_inferior_pid);
+  if (ws->kind != TARGET_WAITKIND_VFORKED)
+    return 0;
+
+  c->forked_inferior_pid = ws->value.related_pid;
+  return 1;
 }
 
 /* Implement the "print_it" breakpoint_ops method for vfork
@@ -6557,9 +6565,12 @@ breakpoint_hit_catch_syscall (const struct bp_location *bl,
   const struct syscall_catchpoint *c
     = (const struct syscall_catchpoint *) bl->owner;
 
-  if (!inferior_has_called_syscall (inferior_ptid, &syscall_number))
+  if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
+      && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
     return 0;
 
+  syscall_number = ws->value.syscall_number;
+
   /* Now, checking if the syscall is the same.  */
   if (c->syscalls_to_be_caught)
     {
@@ -6865,7 +6876,11 @@ breakpoint_hit_catch_exec (const struct bp_location *bl,
 {
   struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
 
-  return inferior_has_execd (inferior_ptid, &c->exec_pathname);
+  if (ws->kind != TARGET_WAITKIND_EXECD)
+    return 0;
+
+  c->exec_pathname = xstrdup (ws->value.execd_pathname);
+  return 1;
 }
 
 static enum print_stop_action
diff --git a/gdb/infrun.c b/gdb/infrun.c
index 4b7422f..53065c8 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -3076,6 +3076,7 @@ handle_syscall_event (struct execution_control_state *ecs)
   stop_pc = regcache_read_pc (regcache);
 
   target_last_waitstatus.value.syscall_number = syscall_number;
+  ecs->ws.value.syscall_number = syscall_number;
 
   if (catch_syscall_enabled () > 0
       && catching_syscall_number (syscall_number) > 0)
@@ -6863,79 +6864,6 @@ discard_infcall_control_state (struct infcall_control_state *inf_status)
 }
 
 int
-inferior_has_forked (ptid_t pid, ptid_t *child_pid)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_FORKED)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *child_pid = last.value.related_pid;
-  return 1;
-}
-
-int
-inferior_has_vforked (ptid_t pid, ptid_t *child_pid)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_VFORKED)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *child_pid = last.value.related_pid;
-  return 1;
-}
-
-int
-inferior_has_execd (ptid_t pid, char **execd_pathname)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_EXECD)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *execd_pathname = xstrdup (last.value.execd_pathname);
-  return 1;
-}
-
-int
-inferior_has_called_syscall (ptid_t pid, int *syscall_number)
-{
-  struct target_waitstatus last;
-  ptid_t last_ptid;
-
-  get_last_target_status (&last_ptid, &last);
-
-  if (last.kind != TARGET_WAITKIND_SYSCALL_ENTRY &&
-      last.kind != TARGET_WAITKIND_SYSCALL_RETURN)
-    return 0;
-
-  if (!ptid_equal (last_ptid, pid))
-    return 0;
-
-  *syscall_number = last.value.syscall_number;
-  return 1;
-}
-
-int
 ptid_match (ptid_t ptid, ptid_t filter)
 {
   if (ptid_equal (filter, minus_one_ptid))
-- 
1.7.6.5



More information about the Gdb-patches mailing list