This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Fork event updates, part the second


The next patch in the series.  This one has no substantive changes except to
push HP/UX specific code from infrun.c and inftarg.c back into hppah-nat.c.

There were formerly four methods: target_has_forked, target_has_vforked,
target_has_execd, target_has_syscall_event.  They were used in two places:
  - breakpoint.c to figure out if a catchpoint triggered
  - inftarg.c's default child_wait to see whether to return a
    TARGET_WAITKIND_*.

That's the wrong way to go; we shouldn't go grubbing around in the target
twice for this information.  And we don't need to call a target-specific
hook in bpstat_stop_status to figure out why we stopped; the information is
already available in the waitstatus.

So what I did in this patch was remove those four hooks; make their
implementations private to the HP/UX code; give HP/UX a custom child_wait
function which calls them; and provide functions to check for fork events
etc. in the saved waitstatus.  Then I cleared the HP/UXisms out of
inftarg.c:child_wait.

The inspiration was that the hooks didn't have enough information in their
current form to do their job on Linux; when I went to look at fixing them I
decided this was cleaner.  So far my total is at five target hooks removed;
I've got one to add and at least two more to remove, also.  In the end I
just have target_follow_fork().

This patch is entirely mechanical, and tested on i386-linux and HP/UX.  I'll
commit this on Friday also, unless there are comments/concerns.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

2002-11-13  Daniel Jacobowitz  <drow@mvista.com>

	* breakpoint.c (bpstat_stop_status): Call inferior_has_forked,
	inferior_has_vforked, and inferior_has_execd instead of
	target_has_forked, target_has_vforked, and target_has_execd.
	* config/pa/nm-hppah.h (CHILD_HAS_FORKED, CHILD_HAS_VFORKED)
	(CHILD_HAS_EXECD, CHILD_HAS_SYSCALL_EVENT): Don't define.
	(CHILD_WAIT): Define.
	(child_wait): Add prototype.
	* hppah-nat.c (hpux_has_forked): Rename from child_has_forked.
	Add prototype.
	(hpux_has_vforked): Likewise, from child_has_vforked.
	(hpux_has_execd): Likewise, from child_has_execd.
	(hpux_has_syscall_event): Likewise, from child_has_syscall_event.
	(not_same_real_pid, child_wait): New, copied from inftarg.c.
	Call hpux_has_forked, hpux_has_vforked, hpux_has_execd,
	and hpux_has_syscall_event instead of the target hooks.
	* infrun.c (inferior_has_forked, inferior_has_vforked)
	(inferior_has_execd): New functions.
	* inftarg.c (not_same_real_pid): Remove.
	(child_wait): Remove references to not_same_real_pid,
	target_has_forked, target_has_vforked, target_has_execd,
	and target_has_syscall_event.
	(child_has_forked, child_has_vforked, child_has_execd)
	(child_has_syscall_event): Remove.
	(init_child_ops): Remove references to child_has_forked,
	child_has_vforked, child_has_execd, and child_has_syscall_event.
	* infttrace.c (hpux_has_forked): Rename from child_has_forked.
	(hpux_has_vforked): Likewise, from child_has_vforked.
	(hpux_has_execd): Likewise, from child_has_execd.
	(hpux_has_syscall_event): Likewise, from child_has_syscall_event.
	* target.c (cleanup_target): Remove references to
	to_has_forked, to_has_vforked, to_has_execd, and
	to_has_syscall_event.
	(update_current_target): Likewise.
	(setup_target_debug): Likewise.
	(debug_to_has_forked): Remove.
	(debug_to_has_vforked): Remove.
	(debug_to_has_execd): Remove.
	(debug_to_has_syscall_event): Remove.
	* target.h (struct target_ops): Remove to_has_forked.
	to_has_vforked, to_has_execd, and to_has_syscall_event.
	(child_has_forked, child_has_vforked, child_has_execd)
	(child_has_syscall_event): Remove prototypes.
	(inferior_has_forked, inferior_has_vforked, inferior_has_execd): Add
	prototypes.
	(target_has_forked, target_has_vforked, target_has_execd)
	(target_has_syscall_event): Remove macros.

diff -urp gdb.work1/breakpoint.c gdb.work2/breakpoint.c
--- gdb.work1/breakpoint.c	2002-11-10 19:37:58.000000000 -0500
+++ gdb.work2/breakpoint.c	2002-11-13 15:01:36.000000000 -0500
@@ -2570,17 +2570,17 @@ bpstat_stop_status (CORE_ADDR *pc, int n
       continue;
 
     if ((b->type == bp_catch_fork)
-	&& !target_has_forked (PIDGET (inferior_ptid),
-	                       &b->forked_inferior_pid))
+	&& !inferior_has_forked (PIDGET (inferior_ptid),
+				 &b->forked_inferior_pid))
       continue;
 
     if ((b->type == bp_catch_vfork)
-	&& !target_has_vforked (PIDGET (inferior_ptid),
-	                        &b->forked_inferior_pid))
+	&& !inferior_has_vforked (PIDGET (inferior_ptid),
+				  &b->forked_inferior_pid))
       continue;
 
     if ((b->type == bp_catch_exec)
-	&& !target_has_execd (PIDGET (inferior_ptid), &b->exec_pathname))
+	&& !inferior_has_execd (PIDGET (inferior_ptid), &b->exec_pathname))
       continue;
 
     if (ep_is_exception_catchpoint (b) &&
diff -urp gdb.work1/config/pa/nm-hppah.h gdb.work2/config/pa/nm-hppah.h
--- gdb.work1/config/pa/nm-hppah.h	2002-11-13 16:18:27.000000000 -0500
+++ gdb.work2/config/pa/nm-hppah.h	2002-11-13 16:18:26.000000000 -0500
@@ -81,16 +81,14 @@ extern int hppa_prepare_to_proceed (void
 #define CHILD_REMOVE_FORK_CATCHPOINT
 #define CHILD_INSERT_VFORK_CATCHPOINT
 #define CHILD_REMOVE_VFORK_CATCHPOINT
-#define CHILD_HAS_FORKED
-#define CHILD_HAS_VFORKED
 #define CHILD_INSERT_EXEC_CATCHPOINT
 #define CHILD_REMOVE_EXEC_CATCHPOINT
-#define CHILD_HAS_EXECD
 #define CHILD_REPORTED_EXEC_EVENTS_PER_EXEC_CALL
-#define CHILD_HAS_SYSCALL_EVENT
 #define CHILD_POST_ATTACH
 #define CHILD_THREAD_ALIVE
 #define CHILD_PID_TO_STR
+#define CHILD_WAIT
+extern ptid_t child_wait (ptid_t, struct target_waitstatus *);
 
 #define REQUIRE_ATTACH(pid) hppa_require_attach(pid)
 extern int hppa_require_attach (int);
diff -urp gdb.work1/hppah-nat.c gdb.work2/hppah-nat.c
--- gdb.work1/hppah-nat.c	2002-11-12 18:58:49.000000000 -0500
+++ gdb.work2/hppah-nat.c	2002-11-13 14:43:37.000000000 -0500
@@ -35,6 +35,12 @@
 
 extern CORE_ADDR text_end;
 
+extern int hpux_has_forked (int pid, int *childpid);
+extern int hpux_has_vforked (int pid, int *childpid);
+extern int hpux_has_execd (int pid, char **execd_pathname);
+extern int hpux_has_syscall_event (int pid, enum target_waitkind *kind,
+				   int *syscall_id);
+
 static void fetch_register (int);
 
 void
@@ -469,6 +475,130 @@ hppa_tid_to_str (ptid_t ptid)
   return buf;
 }
 
+/*## */
+/* Enable HACK for ttrace work.  In
+ * infttrace.c/require_notification_of_events,
+ * this is set to 0 so that the loop in child_wait
+ * won't loop.
+ */
+int not_same_real_pid = 1;
+/*## */
+
+
+/* Wait for child to do something.  Return pid of child, or -1 in case
+   of error; store status through argument pointer OURSTATUS.  */
+
+ptid_t
+child_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
+{
+  int save_errno;
+  int status;
+  char *execd_pathname = NULL;
+  int exit_status;
+  int related_pid;
+  int syscall_id;
+  enum target_waitkind kind;
+  int pid;
+
+  do
+    {
+      set_sigint_trap ();	/* Causes SIGINT to be passed on to the
+				   attached process. */
+      set_sigio_trap ();
+
+      pid = ptrace_wait (inferior_ptid, &status);
+
+      save_errno = errno;
+
+      clear_sigio_trap ();
+
+      clear_sigint_trap ();
+
+      if (pid == -1)
+	{
+	  if (save_errno == EINTR)
+	    continue;
+
+	  fprintf_unfiltered (gdb_stderr, "Child process unexpectedly missing: %s.\n",
+			      safe_strerror (save_errno));
+
+	  /* Claim it exited with unknown signal.  */
+	  ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
+	  ourstatus->value.sig = TARGET_SIGNAL_UNKNOWN;
+	  return pid_to_ptid (-1);
+	}
+
+      /* Did it exit?
+       */
+      if (target_has_exited (pid, status, &exit_status))
+	{
+	  /* ??rehrauer: For now, ignore this. */
+	  continue;
+	}
+
+      if (!target_thread_alive (pid_to_ptid (pid)))
+	{
+	  ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
+	  return pid_to_ptid (pid);
+	}
+
+      if (hpux_has_forked (pid, &related_pid)
+	  && ((pid == PIDGET (inferior_ptid)) 
+	      || (related_pid == PIDGET (inferior_ptid))))
+	{
+	  ourstatus->kind = TARGET_WAITKIND_FORKED;
+	  ourstatus->value.related_pid = related_pid;
+	  return pid_to_ptid (pid);
+	}
+
+      if (hpux_has_vforked (pid, &related_pid)
+	  && ((pid == PIDGET (inferior_ptid))
+	      || (related_pid == PIDGET (inferior_ptid))))
+	{
+	  ourstatus->kind = TARGET_WAITKIND_VFORKED;
+	  ourstatus->value.related_pid = related_pid;
+	  return pid_to_ptid (pid);
+	}
+
+      if (hpux_has_execd (pid, &execd_pathname))
+	{
+	  /* Are we ignoring initial exec events?  (This is likely because
+	     we're in the process of starting up the inferior, and another
+	     (older) mechanism handles those.)  If so, we'll report this
+	     as a regular stop, not an exec.
+	   */
+	  if (inferior_ignoring_startup_exec_events)
+	    {
+	      inferior_ignoring_startup_exec_events--;
+	    }
+	  else
+	    {
+	      ourstatus->kind = TARGET_WAITKIND_EXECD;
+	      ourstatus->value.execd_pathname = execd_pathname;
+	      return pid_to_ptid (pid);
+	    }
+	}
+
+      /* All we must do with these is communicate their occurrence
+         to wait_for_inferior...
+       */
+      if (hpux_has_syscall_event (pid, &kind, &syscall_id))
+	{
+	  ourstatus->kind = kind;
+	  ourstatus->value.syscall_id = syscall_id;
+	  return pid_to_ptid (pid);
+	}
+
+      /*##  } while (pid != PIDGET (inferior_ptid)); ## *//* Some other child died or stopped */
+/* hack for thread testing */
+    }
+  while ((pid != PIDGET (inferior_ptid)) && not_same_real_pid);
+/*## */
+
+  store_waitstatus (ourstatus, status);
+  return pid_to_ptid (pid);
+}
+
 #if !defined (GDB_NATIVE_HPUX_11)
 
 /* The following code is a substitute for the infttrace.c versions used
@@ -890,7 +1020,7 @@ child_remove_vfork_catchpoint (int pid)
 }
 
 int
-child_has_forked (int pid, int *childpid)
+hpux_has_forked (int pid, int *childpid)
 {
   /* This request is only available on HPUX 10.0 and later.  */
 #if !defined(PT_GET_PROCESS_STATE)
@@ -921,7 +1051,7 @@ child_has_forked (int pid, int *childpid
 }
 
 int
-child_has_vforked (int pid, int *childpid)
+hpux_has_vforked (int pid, int *childpid)
 {
   /* This request is only available on HPUX 10.0 and later.  */
 #if !defined(PT_GET_PROCESS_STATE)
@@ -983,7 +1113,7 @@ child_remove_exec_catchpoint (int pid)
 }
 
 int
-child_has_execd (int pid, char **execd_pathname)
+hpux_has_execd (int pid, char **execd_pathname)
 {
   /* This request is only available on HPUX 10.0 and later.  */
 #if !defined(PT_GET_PROCESS_STATE)
@@ -1022,7 +1152,7 @@ child_reported_exec_events_per_exec_call
 }
 
 int
-child_has_syscall_event (int pid, enum target_waitkind *kind, int *syscall_id)
+hpux_has_syscall_event (int pid, enum target_waitkind *kind, int *syscall_id)
 {
   /* This request is only available on HPUX 10.30 and later, via
      the ttrace interface.  */
diff -urp gdb.work1/infrun.c gdb.work2/infrun.c
--- gdb.work1/infrun.c	2002-11-12 18:57:11.000000000 -0500
+++ gdb.work2/infrun.c	2002-11-13 15:03:12.000000000 -0500
@@ -3983,6 +3983,60 @@ discard_inferior_status (struct inferior
   xfree (inf_status);
 }
 
+int
+inferior_has_forked (int pid, int *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_get_pid (last_ptid) != pid)
+    return 0;
+
+  *child_pid = last.value.related_pid;
+  return 1;
+}
+
+int
+inferior_has_vforked (int pid, int *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_get_pid (last_ptid) != pid)
+    return 0;
+
+  *child_pid = last.value.related_pid;
+  return 1;
+}
+
+int
+inferior_has_execd (int 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_get_pid (last_ptid) != pid)
+    return 0;
+
+  *execd_pathname = xstrdup (last.value.execd_pathname);
+  return 1;
+}
+
 /* Oft used ptids */
 ptid_t null_ptid;
 ptid_t minus_one_ptid;
diff -urp gdb.work1/inftarg.c gdb.work2/inftarg.c
--- gdb.work1/inftarg.c	2002-11-12 18:58:16.000000000 -0500
+++ gdb.work2/inftarg.c	2002-11-13 14:56:24.000000000 -0500
@@ -104,16 +104,6 @@ int child_suppress_run = 0;	/* Non-zero 
 
 #ifndef CHILD_WAIT
 
-/*## */
-/* Enable HACK for ttrace work.  In
- * infttrace.c/require_notification_of_events,
- * this is set to 0 so that the loop in child_wait
- * won't loop.
- */
-int not_same_real_pid = 1;
-/*## */
-
-
 /* Wait for child to do something.  Return pid of child, or -1 in case
    of error; store status through argument pointer OURSTATUS.  */
 
@@ -170,59 +160,7 @@ child_wait (ptid_t ptid, struct target_w
 	  ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
 	  return pid_to_ptid (pid);
 	}
-
-      if (target_has_forked (pid, &related_pid)
-	  && ((pid == PIDGET (inferior_ptid)) 
-	      || (related_pid == PIDGET (inferior_ptid))))
-	{
-	  ourstatus->kind = TARGET_WAITKIND_FORKED;
-	  ourstatus->value.related_pid = related_pid;
-	  return pid_to_ptid (pid);
-	}
-
-      if (target_has_vforked (pid, &related_pid)
-	  && ((pid == PIDGET (inferior_ptid))
-	      || (related_pid == PIDGET (inferior_ptid))))
-	{
-	  ourstatus->kind = TARGET_WAITKIND_VFORKED;
-	  ourstatus->value.related_pid = related_pid;
-	  return pid_to_ptid (pid);
-	}
-
-      if (target_has_execd (pid, &execd_pathname))
-	{
-	  /* Are we ignoring initial exec events?  (This is likely because
-	     we're in the process of starting up the inferior, and another
-	     (older) mechanism handles those.)  If so, we'll report this
-	     as a regular stop, not an exec.
-	   */
-	  if (inferior_ignoring_startup_exec_events)
-	    {
-	      inferior_ignoring_startup_exec_events--;
-	    }
-	  else
-	    {
-	      ourstatus->kind = TARGET_WAITKIND_EXECD;
-	      ourstatus->value.execd_pathname = execd_pathname;
-	      return pid_to_ptid (pid);
-	    }
-	}
-
-      /* All we must do with these is communicate their occurrence
-         to wait_for_inferior...
-       */
-      if (target_has_syscall_event (pid, &kind, &syscall_id))
-	{
-	  ourstatus->kind = kind;
-	  ourstatus->value.syscall_id = syscall_id;
-	  return pid_to_ptid (pid);
-	}
-
-      /*##  } while (pid != PIDGET (inferior_ptid)); ## *//* Some other child died or stopped */
-/* hack for thread testing */
-    }
-  while ((pid != PIDGET (inferior_ptid)) && not_same_real_pid);
-/*## */
+      } while (pid != PIDGET (inferior_ptid)); /* Some other child died or stopped */
 
   store_waitstatus (ourstatus, status);
   return pid_to_ptid (pid);
@@ -552,27 +490,6 @@ child_remove_vfork_catchpoint (int pid)
 }
 #endif
 
-#if !defined(CHILD_HAS_FORKED)
-int
-child_has_forked (int pid, int *child_pid)
-{
-  /* This version of Unix doesn't support notification of fork events.  */
-  return 0;
-}
-#endif
-
-
-#if !defined(CHILD_HAS_VFORKED)
-int
-child_has_vforked (int pid, int *child_pid)
-{
-  /* This version of Unix doesn't support notification of vfork events.
-   */
-  return 0;
-}
-#endif
-
-
 #if !defined(CHILD_POST_FOLLOW_VFORK)
 void
 child_post_follow_vfork (int parent_pid, int followed_parent, int child_pid,
@@ -602,17 +519,6 @@ child_remove_exec_catchpoint (int pid)
 }
 #endif
 
-#if !defined(CHILD_HAS_EXECD)
-int
-child_has_execd (int pid, char **execd_pathname)
-{
-  /* This version of Unix doesn't support notification of exec events.
-   */
-  return 0;
-}
-#endif
-
-
 #if !defined(CHILD_REPORTED_EXEC_EVENTS_PER_EXEC_CALL)
 int
 child_reported_exec_events_per_exec_call (void)
@@ -623,18 +529,6 @@ child_reported_exec_events_per_exec_call
 }
 #endif
 
-
-#if !defined(CHILD_HAS_SYSCALL_EVENT)
-int
-child_has_syscall_event (int pid, enum target_waitkind *kind, int *syscall_id)
-{
-  /* This version of Unix doesn't support notification of syscall events.
-   */
-  return 0;
-}
-#endif
-
-
 #if !defined(CHILD_HAS_EXITED)
 int
 child_has_exited (int pid, int wait_status, int *exit_status)
@@ -774,14 +668,10 @@ init_child_ops (void)
   child_ops.to_remove_fork_catchpoint = child_remove_fork_catchpoint;
   child_ops.to_insert_vfork_catchpoint = child_insert_vfork_catchpoint;
   child_ops.to_remove_vfork_catchpoint = child_remove_vfork_catchpoint;
-  child_ops.to_has_forked = child_has_forked;
-  child_ops.to_has_vforked = child_has_vforked;
   child_ops.to_post_follow_vfork = child_post_follow_vfork;
   child_ops.to_insert_exec_catchpoint = child_insert_exec_catchpoint;
   child_ops.to_remove_exec_catchpoint = child_remove_exec_catchpoint;
-  child_ops.to_has_execd = child_has_execd;
   child_ops.to_reported_exec_events_per_exec_call = child_reported_exec_events_per_exec_call;
-  child_ops.to_has_syscall_event = child_has_syscall_event;
   child_ops.to_has_exited = child_has_exited;
   child_ops.to_mourn_inferior = child_mourn_inferior;
   child_ops.to_can_run = child_can_run;
diff -urp gdb.work1/infttrace.c gdb.work2/infttrace.c
--- gdb.work1/infttrace.c	2002-11-12 18:57:42.000000000 -0500
+++ gdb.work2/infttrace.c	2002-11-13 14:56:58.000000000 -0500
@@ -2289,7 +2289,7 @@ call_ttrace_wait (int pid, ttwopt_t opti
      thread descriptor.
 
      This caches the state.  The implementation of queries like
-     target_has_execd can then use this cached state, rather than
+     hpux_has_execd can then use this cached state, rather than
      be forced to make an explicit ttrace call to get it.
 
      (Guard against the condition that this is the first time we've
@@ -3357,8 +3357,6 @@ child_remove_vfork_catchpoint (int tid)
 }
 #endif
 
-#if defined(CHILD_HAS_FORKED)
-
 /* Q: Do we need to map the returned process ID to a thread ID?
 
  * A: I don't think so--here we want a _real_ pid.  Any later
@@ -3366,7 +3364,7 @@ child_remove_vfork_catchpoint (int tid)
  *    start the mapping.
  */
 int
-child_has_forked (int tid, int *childpid)
+hpux_has_forked (int tid, int *childpid)
 {
   int tt_status;
   ttstate_t ttrace_state;
@@ -3403,15 +3401,11 @@ child_has_forked (int tid, int *childpid
 
   return 0;
 }
-#endif
-
-
-#if defined(CHILD_HAS_VFORKED)
 
-/* See child_has_forked for pid discussion.
+/* See hpux_has_forked for pid discussion.
  */
 int
-child_has_vforked (int tid, int *childpid)
+hpux_has_vforked (int tid, int *childpid)
 {
   int tt_status;
   ttstate_t ttrace_state;
@@ -3446,7 +3440,6 @@ child_has_vforked (int tid, int *childpi
 
   return 0;
 }
-#endif
 
 
 #if defined(CHILD_INSERT_EXEC_CATCHPOINT)
@@ -3475,9 +3468,8 @@ child_remove_exec_catchpoint (int tid)
 #endif
 
 
-#if defined(CHILD_HAS_EXECD)
 int
-child_has_execd (int tid, char **execd_pathname)
+hpux_has_execd (int tid, char **execd_pathname)
 {
   int tt_status;
   ttstate_t ttrace_state;
@@ -3516,12 +3508,10 @@ child_has_execd (int tid, char **execd_p
 
   return 0;
 }
-#endif
 
 
-#if defined(CHILD_HAS_SYSCALL_EVENT)
 int
-child_has_syscall_event (int pid, enum target_waitkind *kind, int *syscall_id)
+hpux_has_syscall_event (int pid, enum target_waitkind *kind, int *syscall_id)
 {
   int tt_status;
   ttstate_t ttrace_state;
@@ -3561,7 +3551,6 @@ child_has_syscall_event (int pid, enum t
   *syscall_id = ttrace_state.tts_scno;
   return 1;
 }
-#endif
 
 
 
diff -urp gdb.work1/target.c gdb.work2/target.c
--- gdb.work1/target.c	2002-11-12 18:59:23.000000000 -0500
+++ gdb.work2/target.c	2002-11-13 14:53:04.000000000 -0500
@@ -486,12 +486,6 @@ cleanup_target (struct target_ops *t)
   de_fault (to_remove_vfork_catchpoint, 
 	    (int (*) (int)) 
 	    tcomplain);
-  de_fault (to_has_forked, 
-	    (int (*) (int, int *)) 
-	    return_zero);
-  de_fault (to_has_vforked, 
-	    (int (*) (int, int *)) 
-	    return_zero);
   de_fault (to_post_follow_vfork, 
 	    (void (*) (int, int, int, int)) 
 	    target_ignore);
@@ -501,15 +495,9 @@ cleanup_target (struct target_ops *t)
   de_fault (to_remove_exec_catchpoint, 
 	    (int (*) (int)) 
 	    tcomplain);
-  de_fault (to_has_execd, 
-	    (int (*) (int, char **)) 
-	    return_zero);
   de_fault (to_reported_exec_events_per_exec_call, 
 	    (int (*) (void)) 
 	    return_one);
-  de_fault (to_has_syscall_event, 
-	    (int (*) (int, enum target_waitkind *, int *)) 
-	    return_zero);
   de_fault (to_has_exited, 
 	    (int (*) (int, int, int *)) 
 	    return_zero);
@@ -624,14 +612,10 @@ update_current_target (void)
       INHERIT (to_remove_fork_catchpoint, t);
       INHERIT (to_insert_vfork_catchpoint, t);
       INHERIT (to_remove_vfork_catchpoint, t);
-      INHERIT (to_has_forked, t);
-      INHERIT (to_has_vforked, t);
       INHERIT (to_post_follow_vfork, t);
       INHERIT (to_insert_exec_catchpoint, t);
       INHERIT (to_remove_exec_catchpoint, t);
-      INHERIT (to_has_execd, t);
       INHERIT (to_reported_exec_events_per_exec_call, t);
-      INHERIT (to_has_syscall_event, t);
       INHERIT (to_has_exited, t);
       INHERIT (to_mourn_inferior, t);
       INHERIT (to_can_run, t);
@@ -2124,32 +2108,6 @@ debug_to_remove_vfork_catchpoint (int pi
   return retval;
 }
 
-static int
-debug_to_has_forked (int pid, int *child_pid)
-{
-  int has_forked;
-
-  has_forked = debug_target.to_has_forked (pid, child_pid);
-
-  fprintf_unfiltered (gdb_stdlog, "target_has_forked (%d, %d) = %d\n",
-		      pid, *child_pid, has_forked);
-
-  return has_forked;
-}
-
-static int
-debug_to_has_vforked (int pid, int *child_pid)
-{
-  int has_vforked;
-
-  has_vforked = debug_target.to_has_vforked (pid, child_pid);
-
-  fprintf_unfiltered (gdb_stdlog, "target_has_vforked (%d, %d) = %d\n",
-		      pid, *child_pid, has_vforked);
-
-  return has_vforked;
-}
-
 static void
 debug_to_post_follow_vfork (int parent_pid, int followed_parent, int child_pid,
 			    int followed_child)
@@ -2188,20 +2146,6 @@ debug_to_remove_exec_catchpoint (int pid
 }
 
 static int
-debug_to_has_execd (int pid, char **execd_pathname)
-{
-  int has_execd;
-
-  has_execd = debug_target.to_has_execd (pid, execd_pathname);
-
-  fprintf_unfiltered (gdb_stdlog, "target_has_execd (%d, %s) = %d\n",
-		      pid, (*execd_pathname ? *execd_pathname : "<NULL>"),
-		      has_execd);
-
-  return has_execd;
-}
-
-static int
 debug_to_reported_exec_events_per_exec_call (void)
 {
   int reported_exec_events;
@@ -2216,36 +2160,6 @@ debug_to_reported_exec_events_per_exec_c
 }
 
 static int
-debug_to_has_syscall_event (int pid, enum target_waitkind *kind,
-			    int *syscall_id)
-{
-  int has_syscall_event;
-  char *kind_spelling = "??";
-
-  has_syscall_event = debug_target.to_has_syscall_event (pid, kind, syscall_id);
-  if (has_syscall_event)
-    {
-      switch (*kind)
-	{
-	case TARGET_WAITKIND_SYSCALL_ENTRY:
-	  kind_spelling = "SYSCALL_ENTRY";
-	  break;
-	case TARGET_WAITKIND_SYSCALL_RETURN:
-	  kind_spelling = "SYSCALL_RETURN";
-	  break;
-	default:
-	  break;
-	}
-    }
-
-  fprintf_unfiltered (gdb_stdlog,
-		      "target_has_syscall_event (%d, %s, %d) = %d\n",
-		      pid, kind_spelling, *syscall_id, has_syscall_event);
-
-  return has_syscall_event;
-}
-
-static int
 debug_to_has_exited (int pid, int wait_status, int *exit_status)
 {
   int has_exited;
@@ -2417,14 +2331,10 @@ setup_target_debug (void)
   current_target.to_remove_fork_catchpoint = debug_to_remove_fork_catchpoint;
   current_target.to_insert_vfork_catchpoint = debug_to_insert_vfork_catchpoint;
   current_target.to_remove_vfork_catchpoint = debug_to_remove_vfork_catchpoint;
-  current_target.to_has_forked = debug_to_has_forked;
-  current_target.to_has_vforked = debug_to_has_vforked;
   current_target.to_post_follow_vfork = debug_to_post_follow_vfork;
   current_target.to_insert_exec_catchpoint = debug_to_insert_exec_catchpoint;
   current_target.to_remove_exec_catchpoint = debug_to_remove_exec_catchpoint;
-  current_target.to_has_execd = debug_to_has_execd;
   current_target.to_reported_exec_events_per_exec_call = debug_to_reported_exec_events_per_exec_call;
-  current_target.to_has_syscall_event = debug_to_has_syscall_event;
   current_target.to_has_exited = debug_to_has_exited;
   current_target.to_mourn_inferior = debug_to_mourn_inferior;
   current_target.to_can_run = debug_to_can_run;
diff -urp gdb.work1/target.h gdb.work2/target.h
--- gdb.work1/target.h	2002-11-12 18:58:35.000000000 -0500
+++ gdb.work2/target.h	2002-11-13 15:05:07.000000000 -0500
@@ -278,14 +278,10 @@ struct target_ops
     int (*to_remove_fork_catchpoint) (int);
     int (*to_insert_vfork_catchpoint) (int);
     int (*to_remove_vfork_catchpoint) (int);
-    int (*to_has_forked) (int, int *);
-    int (*to_has_vforked) (int, int *);
     void (*to_post_follow_vfork) (int, int, int, int);
     int (*to_insert_exec_catchpoint) (int);
     int (*to_remove_exec_catchpoint) (int);
-    int (*to_has_execd) (int, char **);
     int (*to_reported_exec_events_per_exec_call) (void);
-    int (*to_has_syscall_event) (int, enum target_waitkind *, int *);
     int (*to_has_exited) (int, int, int *);
     void (*to_mourn_inferior) (void);
     int (*to_can_run) (void);
@@ -556,10 +552,6 @@ extern int child_insert_vfork_catchpoint
 
 extern int child_remove_vfork_catchpoint (int);
 
-extern int child_has_forked (int, int *);
-
-extern int child_has_vforked (int, int *);
-
 extern void child_acknowledge_created_inferior (int);
 
 extern void child_post_follow_vfork (int, int, int, int);
@@ -568,16 +560,20 @@ extern int child_insert_exec_catchpoint 
 
 extern int child_remove_exec_catchpoint (int);
 
-extern int child_has_execd (int, char **);
-
 extern int child_reported_exec_events_per_exec_call (void);
 
-extern int child_has_syscall_event (int, enum target_waitkind *, int *);
-
 extern int child_has_exited (int, int, int *);
 
 extern int child_thread_alive (ptid_t);
 
+/* From infrun.c.  */
+
+extern int inferior_has_forked (int pid, int *child_pid);
+
+extern int inferior_has_vforked (int pid, int *child_pid);
+
+extern int inferior_has_execd (int pid, char **execd_pathname);
+
 /* From exec.c */
 
 extern void print_section_info (struct target_ops *, bfd *);
@@ -742,20 +738,6 @@ extern void target_load (char *arg, int 
 #define target_remove_vfork_catchpoint(pid) \
      (*current_target.to_remove_vfork_catchpoint) (pid)
 
-/* Returns TRUE if PID has invoked the fork() system call.  And,
-   also sets CHILD_PID to the process id of the other ("child")
-   inferior process that was created by that call.  */
-
-#define target_has_forked(pid,child_pid) \
-     (*current_target.to_has_forked) (pid,child_pid)
-
-/* Returns TRUE if PID has invoked the vfork() system call.  And, 
-   also sets CHILD_PID to the process id of the other ("child") 
-   inferior process that was created by that call.  */
-
-#define target_has_vforked(pid,child_pid) \
-     (*current_target.to_has_vforked) (pid,child_pid)
-
 /* An inferior process has been created via a vfork() system call.
    The debugger has followed the parent, the child, or both.  The
    process of setting up for that follow may have required some
@@ -777,13 +759,6 @@ extern void target_load (char *arg, int 
 #define target_remove_exec_catchpoint(pid) \
      (*current_target.to_remove_exec_catchpoint) (pid)
 
-/* Returns TRUE if PID has invoked a flavor of the exec() system call.
-   And, also sets EXECD_PATHNAME to the pathname of the executable
-   file that was passed to exec(), and is now being executed.  */
-
-#define target_has_execd(pid,execd_pathname) \
-     (*current_target.to_has_execd) (pid,execd_pathname)
-
 /* Returns the number of exec events that are reported when a process
    invokes a flavor of the exec() system call on this target, if exec
    events are being reported.  */
@@ -791,13 +766,6 @@ extern void target_load (char *arg, int 
 #define target_reported_exec_events_per_exec_call() \
      (*current_target.to_reported_exec_events_per_exec_call) ()
 
-/* Returns TRUE if PID has reported a syscall event.  And, also sets
-   KIND to the appropriate TARGET_WAITKIND_, and sets SYSCALL_ID to
-   the unique integer ID of the syscall.  */
-
-#define target_has_syscall_event(pid,kind,syscall_id) \
-     (*current_target.to_has_syscall_event) (pid,kind,syscall_id)
-
 /* Returns TRUE if PID has exited.  And, also sets EXIT_STATUS to the
    exit code of PID, if any.  */
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]