This is the mail archive of the gdb-patches@sourceware.org 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]

Re: [PATCH] Share more common target structures between gdb and gdbserver


On 07/22/2013 02:18 PM, Tom Tromey wrote:
"Luis" == Luis Machado <lgustavo@codesourcery.com> writes:

Luis> While doing some research about the remote fork following feature, i
Luis> noticed there was some duplication of target data structures for GDB
Luis> and gdbserver.

Luis> This patch moves the shareable code/data structures to
Luis> common/target-common.* and makes both GDB and gdbserver target files
Luis> reference the header common/target-common.h.

Thanks.

Luis> OK?

A couple of trivial nits.

Luis> diff --git a/gdb/common/target-common.c b/gdb/common/target-common.c
Luis> new file mode 100644
Luis> index 0000000..a7ee3e2
Luis> --- /dev/null
Luis> +++ b/gdb/common/target-common.c

Luis> +/* Return a pretty printed form of target_waitstatus.
Luis> +   Space for the result is malloc'd, caller must free.  */
Luis> +
Luis> +#include "target-common.h"

I think common .c files ought to start with:

#ifdef GDBSERVER
#include "server.h"
#else
#include "defs.h"
#endif

Not pretty, but it seems to be the standard.

Agreed. I missed this.


Luis> +/* Generally, what has the program done?  */
Luis> +enum target_waitkind
Luis> +{
[...]
Luis> +  };

This line is mis-indented.
I thought at first that it was this way originally, but you've
reindented the body of the enum generally, just not this line.

Luis> @@ -429,6 +427,7 @@ vec_h = $(srcdir)/../common/vec.h
Luis>  gdb_vecs_h = $(srcdir)/../common/gdb_vecs.h
Luis>  host_defs_h = $(srcdir)/../common/host-defs.h
Luis>  libiberty_h = $(srcdir)/../../include/libiberty.h
Luis> +target_common_h = $(srcdir)/../common/target-common.h

I don't think this is needed.

This is ok with the above fixed.
Thanks for working on this.

Thanks Tom. Please find attached what i plan to commit soon.

Luis

2013-07-22  Luis Machado  <lgustavo@codesourcery.com>
    
	gdb/
	* Makefile.in (SFILES): Add common/target-common.c.
	Add common/target-common.h to headers.
	(COMMON_OBS): Add target-common.o.
	(target-common.o): New target.
	* linux-nat.h (resume_kind): Move to common/target-common.h.
	* target.c (target_waitstatus_to_string): Move to
	common/target-common.c.
	* target.h: Include target-common.h.
	(target_waitkind): Move to common/target-common.h.
	(target_waitstatus): Likewise.
	(TARGET_WNOHANG): Likewise.
	* common/target-common.c: New file.
	* common/target-common.h: New file.
    
	gdb/gdbserver/
	* Makefile.in (SFILES): /common/target-common.c.
	(OBS): Add target-common.o.
	(server_h): Add $(srcdir)/../common/target-common.h.
	(target-common.o): New target.
	* server.c (queue_stop_reply_callback): Free
	status string after use.
	* target.c (target_waitstatus_to_string): Remove.
	* target.h: Include target-common.h.
	(resume_kind): Likewise.
	(target_waitkind): Likewise.
	(target_waitstatus): Likewise.
	(TARGET_WNOHANG): Likewise.

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index a51afcb..2d574d4 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -774,7 +774,8 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	regset.c sol-thread.c windows-termcap.c \
 	common/gdb_vecs.c common/common-utils.c common/xml-utils.c \
 	common/ptid.c common/buffer.c gdb-dlfcn.c common/agent.c \
-	common/format.c common/filestuff.c btrace.c record-btrace.c ctf.c
+	common/format.c common/filestuff.c btrace.c record-btrace.c ctf.c \
+	common/target-common.c
 
 LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c
 
@@ -853,7 +854,7 @@ common/common-utils.h common/xml-utils.h common/buffer.h common/ptid.h \
 common/format.h common/host-defs.h utils.h common/queue.h common/gdb_string.h \
 common/linux-osdata.h gdb-dlfcn.h auto-load.h probe.h stap-probe.h \
 gdb_bfd.h sparc-ravenscar-thread.h ppc-ravenscar-thread.h common/linux-btrace.h \
-ctf.h common/i386-cpuid.h common/i386-gcc-cpuid.h
+ctf.h common/i386-cpuid.h common/i386-gcc-cpuid.h common/target-common.h
 
 # Header files that already have srcdir in them, or which are in objdir.
 
@@ -947,7 +948,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	inferior.o osdata.o gdb_usleep.o record.o record-full.o gcore.o \
 	gdb_vecs.o jit.o progspace.o skip.o probe.o \
 	common-utils.o buffer.o ptid.o gdb-dlfcn.o common-agent.o \
-	format.o registry.o btrace.o record-btrace.o
+	format.o registry.o btrace.o record-btrace.o target-common.o
 
 TSOBS = inflow.o
 
@@ -2021,6 +2022,10 @@ linux-btrace.o: ${srcdir}/common/linux-btrace.c
 	$(COMPILE) $(srcdir)/common/linux-btrace.c
 	$(POSTCOMPILE)
 
+target-common.o: ${srcdir}/common/target-common.c
+	$(COMPILE) $(srcdir)/common/target-common.c
+	$(POSTCOMPILE)
+
 #
 # gdb/tui/ dependencies
 #
diff --git a/gdb/common/target-common.c b/gdb/common/target-common.c
new file mode 100644
index 0000000..2edbb2a
--- /dev/null
+++ b/gdb/common/target-common.c
@@ -0,0 +1,78 @@
+/* Common target operations for GDB and gdbserver.
+
+   Copyright (C) 1990-2013 Free Software Foundation, Inc.
+
+   Contributed by Cygnus Support.
+   Contributed by MontaVista Software.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef GDBSERVER
+#include "server.h"
+#else
+#include "defs.h"
+#endif
+
+/* Return a pretty printed form of target_waitstatus.
+   Space for the result is malloc'd, caller must free.  */
+
+#include "target-common.h"
+
+/* Return a pretty printed form of target_waitstatus.
+   Space for the result is malloc'd, caller must free.  */
+
+char *
+target_waitstatus_to_string (const struct target_waitstatus *ws)
+{
+  const char *kind_str = "status->kind = ";
+
+  switch (ws->kind)
+    {
+    case TARGET_WAITKIND_EXITED:
+      return xstrprintf ("%sexited, status = %d",
+			 kind_str, ws->value.integer);
+    case TARGET_WAITKIND_STOPPED:
+      return xstrprintf ("%sstopped, signal = %s",
+			 kind_str, gdb_signal_to_name (ws->value.sig));
+    case TARGET_WAITKIND_SIGNALLED:
+      return xstrprintf ("%ssignalled, signal = %s",
+			 kind_str, gdb_signal_to_name (ws->value.sig));
+    case TARGET_WAITKIND_LOADED:
+      return xstrprintf ("%sloaded", kind_str);
+    case TARGET_WAITKIND_FORKED:
+      return xstrprintf ("%sforked", kind_str);
+    case TARGET_WAITKIND_VFORKED:
+      return xstrprintf ("%svforked", kind_str);
+    case TARGET_WAITKIND_EXECD:
+      return xstrprintf ("%sexecd", kind_str);
+    case TARGET_WAITKIND_VFORK_DONE:
+      return xstrprintf ("%svfork-done", kind_str);
+    case TARGET_WAITKIND_SYSCALL_ENTRY:
+      return xstrprintf ("%sentered syscall", kind_str);
+    case TARGET_WAITKIND_SYSCALL_RETURN:
+      return xstrprintf ("%sexited syscall", kind_str);
+    case TARGET_WAITKIND_SPURIOUS:
+      return xstrprintf ("%sspurious", kind_str);
+    case TARGET_WAITKIND_IGNORE:
+      return xstrprintf ("%signore", kind_str);
+    case TARGET_WAITKIND_NO_HISTORY:
+      return xstrprintf ("%sno-history", kind_str);
+    case TARGET_WAITKIND_NO_RESUMED:
+      return xstrprintf ("%sno-resumed", kind_str);
+    default:
+      return xstrprintf ("%sunknown???", kind_str);
+    }
+}
diff --git a/gdb/common/target-common.h b/gdb/common/target-common.h
new file mode 100644
index 0000000..d4d73f6
--- /dev/null
+++ b/gdb/common/target-common.h
@@ -0,0 +1,149 @@
+/* Interface between the debugger and target environments, including files
+   and processes, shared between GDB and gdbserver.
+
+   Copyright (C) 1990-2013 Free Software Foundation, Inc.
+
+   Contributed by Cygnus Support.  Written by John Gilmore.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef TARGET_COMMON_H
+#define TARGET_COMMON_H
+
+#include "common-utils.h"
+#include "ptid.h"
+#include "gdb_signals.h"
+
+/* Ways to "resume" a thread.  */
+
+enum resume_kind
+{
+  /* Thread should continue.  */
+  resume_continue,
+
+  /* Thread should single-step.  */
+  resume_step,
+
+  /* Thread should be stopped.  */
+  resume_stop
+};
+
+/* Stuff for target_wait.  */
+
+/* Generally, what has the program done?  */
+enum target_waitkind
+{
+  /* The program has exited.  The exit status is in value.integer.  */
+  TARGET_WAITKIND_EXITED,
+
+  /* The program has stopped with a signal.  Which signal is in
+     value.sig.  */
+  TARGET_WAITKIND_STOPPED,
+
+  /* The program has terminated with a signal.  Which signal is in
+     value.sig.  */
+  TARGET_WAITKIND_SIGNALLED,
+
+  /* The program is letting us know that it dynamically loaded something
+     (e.g. it called load(2) on AIX).  */
+  TARGET_WAITKIND_LOADED,
+
+  /* The program has forked.  A "related" process' PTID is in
+     value.related_pid.  I.e., if the child forks, value.related_pid
+     is the parent's ID.  */
+  TARGET_WAITKIND_FORKED,
+ 
+  /* The program has vforked.  A "related" process's PTID is in
+     value.related_pid.  */
+  TARGET_WAITKIND_VFORKED,
+ 
+  /* The program has exec'ed a new executable file.  The new file's
+     pathname is pointed to by value.execd_pathname.  */
+  TARGET_WAITKIND_EXECD,
+  
+  /* The program had previously vforked, and now the child is done
+     with the shared memory region, because it exec'ed or exited.
+     Note that the event is reported to the vfork parent.  This is
+     only used if GDB did not stay attached to the vfork child,
+     otherwise, a TARGET_WAITKIND_EXECD or
+     TARGET_WAITKIND_EXIT|SIGNALLED event associated with the child
+     has the same effect.  */
+  TARGET_WAITKIND_VFORK_DONE,
+
+  /* The program has entered or returned from a system call.  On
+     HP-UX, this is used in the hardware watchpoint implementation.
+     The syscall's unique integer ID number is in value.syscall_id.  */
+  TARGET_WAITKIND_SYSCALL_ENTRY,
+  TARGET_WAITKIND_SYSCALL_RETURN,
+
+  /* Nothing happened, but we stopped anyway.  This perhaps should be handled
+     within target_wait, but I'm not sure target_wait should be resuming the
+     inferior.  */
+  TARGET_WAITKIND_SPURIOUS,
+
+  /* An event has occured, but we should wait again.
+     Remote_async_wait() returns this when there is an event
+     on the inferior, but the rest of the world is not interested in
+     it.  The inferior has not stopped, but has just sent some output
+     to the console, for instance.  In this case, we want to go back
+     to the event loop and wait there for another event from the
+     inferior, rather than being stuck in the remote_async_wait()
+     function. sThis way the event loop is responsive to other events,
+     like for instance the user typing.  */
+  TARGET_WAITKIND_IGNORE,
+ 
+  /* The target has run out of history information,
+     and cannot run backward any further.  */
+  TARGET_WAITKIND_NO_HISTORY,
+ 
+  /* There are no resumed children left in the program.  */
+  TARGET_WAITKIND_NO_RESUMED
+};
+
+struct target_waitstatus
+{
+  enum target_waitkind kind;
+
+  /* Additional information about the event.  */
+  union
+    {
+      /* Exit status */
+      int integer;
+      /* Signal number */
+      enum gdb_signal sig;
+      /* Forked child pid */
+      ptid_t related_pid;
+      /* execd pathname */
+      char *execd_pathname;
+      /* Syscall number */
+      int syscall_number;
+    } value;
+};
+
+/* Options that can be passed to target_wait.  */
+
+/* Return immediately if there's no event already queued.  If this
+   options is not requested, target_wait blocks waiting for an
+   event.  */
+#define TARGET_WNOHANG 1
+
+/* Prototypes */
+
+/* Return a pretty printed form of target_waitstatus.
+   Space for the result is malloc'd, caller must free.  */
+extern char *target_waitstatus_to_string (const struct target_waitstatus *);
+
+#endif /* TARGET_COMMON_H */
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 2cbf208..b28f743 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -157,7 +157,7 @@ SFILES=	$(srcdir)/gdbreplay.c $(srcdir)/inferiors.c $(srcdir)/dll.c \
 	$(srcdir)/common/common-utils.c $(srcdir)/common/xml-utils.c \
 	$(srcdir)/common/linux-osdata.c $(srcdir)/common/ptid.c \
 	$(srcdir)/common/buffer.c $(srcdir)/common/linux-btrace.c \
-	$(srcdir)/common/filestuff.c
+	$(srcdir)/common/filestuff.c $(srcdir)/common/target-common.c
 
 DEPFILES = @GDBSERVER_DEPFILES@
 
@@ -166,13 +166,11 @@ LIBOBJS = @LIBOBJS@
 SOURCES = $(SFILES)
 TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS}
 
-OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o target.o \
-	utils.o version.o vec.o gdb_vecs.o \
-	mem-break.o hostio.o event-loop.o tracepoint.o \
-	xml-utils.o common-utils.o ptid.o buffer.o format.o filestuff.o \
-	dll.o notif.o tdesc.o \
-	$(XML_BUILTIN) \
-	$(DEPFILES) $(LIBOBJS)
+OBS = agent.o ax.o inferiors.o regcache.o remote-utils.o server.o signals.o \
+      target.o target-common.o utils.o version.o vec.o gdb_vecs.o \
+      mem-break.o hostio.o event-loop.o tracepoint.o xml-utils.o \
+      common-utils.o ptid.o buffer.o format.o filestuff.o dll.o notif.o \
+      tdesc.o $(XML_BUILTIN) $(DEPFILES) $(LIBOBJS)
 GDBREPLAY_OBS = gdbreplay.o version.o
 GDBSERVER_LIBS = @GDBSERVER_LIBS@
 XM_CLIBS = @LIBS@
@@ -438,6 +436,7 @@ server_h = $(srcdir)/server.h $(regcache_h) $(srcdir)/target.h \
 		$(srcdir)/../common/buffer.h \
 		$(srcdir)/../common/gdb_assert.h \
 		$(srcdir)/../common/gdb_locale.h \
+		$(srcdir)/../common/target-common.h \
 		$(ptid_h) \
 		$(signals_h) \
 		$(libiberty_h) \
@@ -548,6 +547,9 @@ filestuff.o: ../common/filestuff.c
 agent.o: ../common/agent.c
 	$(COMPILE) $<
 	$(POSTCOMPILE)
+target-common.o: ../common/target-common.c
+	$(COMPILE) $<
+	$(POSTCOMPILE)
 
 linux-btrace.o: ../common/linux-btrace.c $(linux_btrace_h) $(server_h)
 	$(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $<
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index a172c98..a4b9129 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -2470,10 +2470,17 @@ queue_stop_reply_callback (struct inferior_list_entry *entry, void *arg)
       if (thread_stopped (thread))
 	{
 	  if (debug_threads)
-	    fprintf (stderr,
-		     "Reporting thread %s as already stopped with %s\n",
-		     target_pid_to_str (entry->id),
-		     target_waitstatus_to_string (&thread->last_status));
+	    {
+	      char *status_string
+		= target_waitstatus_to_string (&thread->last_status);
+
+	      fprintf (stderr,
+		       "Reporting thread %s as already stopped with %s\n",
+		       target_pid_to_str (entry->id),
+		       status_string);
+
+	      xfree (status_string);
+	    }
 
 	  gdb_assert (thread->last_status.kind != TARGET_WAITKIND_IGNORE);
 
diff --git a/gdb/gdbserver/target.c b/gdb/gdbserver/target.c
index 3a28099..a47053c 100644
--- a/gdb/gdbserver/target.c
+++ b/gdb/gdbserver/target.c
@@ -140,48 +140,6 @@ target_pid_to_str (ptid_t ptid)
   return buf;
 }
 
-/* Return a pretty printed form of target_waitstatus.  */
-
-const char *
-target_waitstatus_to_string (const struct target_waitstatus *ws)
-{
-  static char buf[200];
-  const char *kind_str = "status->kind = ";
-
-  switch (ws->kind)
-    {
-    case TARGET_WAITKIND_EXITED:
-      sprintf (buf, "%sexited, status = %d",
-	       kind_str, ws->value.integer);
-      break;
-    case TARGET_WAITKIND_STOPPED:
-      sprintf (buf, "%sstopped, signal = %s",
-	       kind_str, gdb_signal_to_name (ws->value.sig));
-      break;
-    case TARGET_WAITKIND_SIGNALLED:
-      sprintf (buf, "%ssignalled, signal = %s",
-	       kind_str, gdb_signal_to_name (ws->value.sig));
-      break;
-    case TARGET_WAITKIND_LOADED:
-      sprintf (buf, "%sloaded", kind_str);
-      break;
-    case TARGET_WAITKIND_EXECD:
-      sprintf (buf, "%sexecd", kind_str);
-      break;
-    case TARGET_WAITKIND_SPURIOUS:
-      sprintf (buf, "%sspurious", kind_str);
-      break;
-    case TARGET_WAITKIND_IGNORE:
-      sprintf (buf, "%signore", kind_str);
-      break;
-    default:
-      sprintf (buf, "%sunknown???", kind_str);
-      break;
-    }
-
-  return buf;
-}
-
 int
 kill_inferior (int pid)
 {
diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h
index c57cb40..d064b79 100644
--- a/gdb/gdbserver/target.h
+++ b/gdb/gdbserver/target.h
@@ -21,24 +21,12 @@
 #ifndef TARGET_H
 #define TARGET_H
 
+#include "target-common.h"
+
 struct emit_ops;
 struct btrace_target_info;
 struct buffer;
 
-/* Ways to "resume" a thread.  */
-
-enum resume_kind
-{
-  /* Thread should continue.  */
-  resume_continue,
-
-  /* Thread should single-step.  */
-  resume_step,
-
-  /* Thread should be stopped.  */
-  resume_stop
-};
-
 /* This structure describes how to resume a particular thread (or all
    threads) based on the client's request.  If thread is -1, then this
    entry applies to all threads.  These are passed around as an
@@ -68,57 +56,6 @@ struct thread_resume
   CORE_ADDR step_range_end;	/* Exclusive */
 };
 
-/* Generally, what has the program done?  */
-enum target_waitkind
-  {
-    /* The program has exited.  The exit status is in
-       value.integer.  */
-    TARGET_WAITKIND_EXITED,
-
-    /* The program has stopped with a signal.  Which signal is in
-       value.sig.  */
-    TARGET_WAITKIND_STOPPED,
-
-    /* The program has terminated with a signal.  Which signal is in
-       value.sig.  */
-    TARGET_WAITKIND_SIGNALLED,
-
-    /* The program is letting us know that it dynamically loaded
-       something.  */
-    TARGET_WAITKIND_LOADED,
-
-    /* The program has exec'ed a new executable file.  The new file's
-       pathname is pointed to by value.execd_pathname.  */
-    TARGET_WAITKIND_EXECD,
-
-    /* Nothing of interest to GDB happened, but we stopped anyway.  */
-    TARGET_WAITKIND_SPURIOUS,
-
-    /* An event has occurred, but we should wait again.  In this case,
-       we want to go back to the event loop and wait there for another
-       event from the inferior.  */
-    TARGET_WAITKIND_IGNORE
-  };
-
-struct target_waitstatus
-  {
-    enum target_waitkind kind;
-
-    /* Forked child pid, execd pathname, exit status or signal number.  */
-    union
-      {
-	int integer;
-	enum gdb_signal sig;
-	ptid_t related_pid;
-	char *execd_pathname;
-      }
-    value;
-  };
-
-/* Options that can be passed to target_ops->wait.  */
-
-#define TARGET_WNOHANG 1
-
 struct target_ops
 {
   /* Start a new process.
@@ -596,6 +533,4 @@ void set_desired_inferior (int id);
 
 const char *target_pid_to_str (ptid_t);
 
-const char *target_waitstatus_to_string (const struct target_waitstatus *);
-
 #endif /* TARGET_H */
diff --git a/gdb/linux-nat.h b/gdb/linux-nat.h
index 3de866d..cb8f1da 100644
--- a/gdb/linux-nat.h
+++ b/gdb/linux-nat.h
@@ -23,20 +23,6 @@
 
 struct arch_lwp_info;
 
-/* Ways to "resume" a thread.  */
-
-enum resume_kind
-{
-  /* Thread should continue.  */
-  resume_continue,
-
-  /* Thread should single-step.  */
-  resume_step,
-
-  /* Thread should be stopped.  */
-  resume_stop
-};
-
 /* Structure describing an LWP.  This is public only for the purposes
    of ALL_LWPS; target-specific code should generally not access it
    directly.  */
diff --git a/gdb/target.c b/gdb/target.c
index bc52ec4..18e10cb 100644
--- a/gdb/target.c
+++ b/gdb/target.c
@@ -3863,52 +3863,6 @@ debug_to_post_attach (int pid)
   fprintf_unfiltered (gdb_stdlog, "target_post_attach (%d)\n", pid);
 }
 
-/* Return a pretty printed form of target_waitstatus.
-   Space for the result is malloc'd, caller must free.  */
-
-char *
-target_waitstatus_to_string (const struct target_waitstatus *ws)
-{
-  const char *kind_str = "status->kind = ";
-
-  switch (ws->kind)
-    {
-    case TARGET_WAITKIND_EXITED:
-      return xstrprintf ("%sexited, status = %d",
-			 kind_str, ws->value.integer);
-    case TARGET_WAITKIND_STOPPED:
-      return xstrprintf ("%sstopped, signal = %s",
-			 kind_str, gdb_signal_to_name (ws->value.sig));
-    case TARGET_WAITKIND_SIGNALLED:
-      return xstrprintf ("%ssignalled, signal = %s",
-			 kind_str, gdb_signal_to_name (ws->value.sig));
-    case TARGET_WAITKIND_LOADED:
-      return xstrprintf ("%sloaded", kind_str);
-    case TARGET_WAITKIND_FORKED:
-      return xstrprintf ("%sforked", kind_str);
-    case TARGET_WAITKIND_VFORKED:
-      return xstrprintf ("%svforked", kind_str);
-    case TARGET_WAITKIND_EXECD:
-      return xstrprintf ("%sexecd", kind_str);
-    case TARGET_WAITKIND_VFORK_DONE:
-      return xstrprintf ("%svfork-done", kind_str);
-    case TARGET_WAITKIND_SYSCALL_ENTRY:
-      return xstrprintf ("%sentered syscall", kind_str);
-    case TARGET_WAITKIND_SYSCALL_RETURN:
-      return xstrprintf ("%sexited syscall", kind_str);
-    case TARGET_WAITKIND_SPURIOUS:
-      return xstrprintf ("%sspurious", kind_str);
-    case TARGET_WAITKIND_IGNORE:
-      return xstrprintf ("%signore", kind_str);
-    case TARGET_WAITKIND_NO_HISTORY:
-      return xstrprintf ("%sno-history", kind_str);
-    case TARGET_WAITKIND_NO_RESUMED:
-      return xstrprintf ("%sno-resumed", kind_str);
-    default:
-      return xstrprintf ("%sunknown???", kind_str);
-    }
-}
-
 /* Concatenate ELEM to LIST, a comma separate list, and return the
    result.  The LIST incoming argument is released.  */
 
diff --git a/gdb/target.h b/gdb/target.h
index 21e5792..f05026d 100644
--- a/gdb/target.h
+++ b/gdb/target.h
@@ -57,6 +57,7 @@ struct expression;
    it goes into the file stratum, which is always below the process
    stratum.  */
 
+#include "target-common.h"
 #include "bfd.h"
 #include "symtab.h"
 #include "memattr.h"
@@ -81,106 +82,6 @@ enum thread_control_capabilities
     tc_schedlock = 1,		/* Can lock the thread scheduler.  */
   };
 
-/* Stuff for target_wait.  */
-
-/* Generally, what has the program done?  */
-enum target_waitkind
-  {
-    /* The program has exited.  The exit status is in value.integer.  */
-    TARGET_WAITKIND_EXITED,
-
-    /* The program has stopped with a signal.  Which signal is in
-       value.sig.  */
-    TARGET_WAITKIND_STOPPED,
-
-    /* The program has terminated with a signal.  Which signal is in
-       value.sig.  */
-    TARGET_WAITKIND_SIGNALLED,
-
-    /* The program is letting us know that it dynamically loaded something
-       (e.g. it called load(2) on AIX).  */
-    TARGET_WAITKIND_LOADED,
-
-    /* The program has forked.  A "related" process' PTID is in
-       value.related_pid.  I.e., if the child forks, value.related_pid
-       is the parent's ID.  */
-
-    TARGET_WAITKIND_FORKED,
-
-    /* The program has vforked.  A "related" process's PTID is in
-       value.related_pid.  */
-
-    TARGET_WAITKIND_VFORKED,
-
-    /* The program has exec'ed a new executable file.  The new file's
-       pathname is pointed to by value.execd_pathname.  */
-
-    TARGET_WAITKIND_EXECD,
-
-    /* The program had previously vforked, and now the child is done
-       with the shared memory region, because it exec'ed or exited.
-       Note that the event is reported to the vfork parent.  This is
-       only used if GDB did not stay attached to the vfork child,
-       otherwise, a TARGET_WAITKIND_EXECD or
-       TARGET_WAITKIND_EXIT|SIGNALLED event associated with the child
-       has the same effect.  */
-    TARGET_WAITKIND_VFORK_DONE,
-
-    /* The program has entered or returned from a system call.  On
-       HP-UX, this is used in the hardware watchpoint implementation.
-       The syscall's unique integer ID number is in value.syscall_id.  */
-
-    TARGET_WAITKIND_SYSCALL_ENTRY,
-    TARGET_WAITKIND_SYSCALL_RETURN,
-
-    /* Nothing happened, but we stopped anyway.  This perhaps should be handled
-       within target_wait, but I'm not sure target_wait should be resuming the
-       inferior.  */
-    TARGET_WAITKIND_SPURIOUS,
-
-    /* An event has occured, but we should wait again.
-       Remote_async_wait() returns this when there is an event
-       on the inferior, but the rest of the world is not interested in
-       it.  The inferior has not stopped, but has just sent some output
-       to the console, for instance.  In this case, we want to go back
-       to the event loop and wait there for another event from the
-       inferior, rather than being stuck in the remote_async_wait()
-       function. sThis way the event loop is responsive to other events,
-       like for instance the user typing.  */
-    TARGET_WAITKIND_IGNORE,
-
-    /* The target has run out of history information,
-       and cannot run backward any further.  */
-    TARGET_WAITKIND_NO_HISTORY,
-
-    /* There are no resumed children left in the program.  */
-    TARGET_WAITKIND_NO_RESUMED
-  };
-
-struct target_waitstatus
-  {
-    enum target_waitkind kind;
-
-    /* Forked child pid, execd pathname, exit status, signal number or
-       syscall number.  */
-    union
-      {
-	int integer;
-	enum gdb_signal sig;
-	ptid_t related_pid;
-	char *execd_pathname;
-	int syscall_number;
-      }
-    value;
-  };
-
-/* Options that can be passed to target_wait.  */
-
-/* Return immediately if there's no event already queued.  If this
-   options is not requested, target_wait blocks waiting for an
-   event.  */
-#define TARGET_WNOHANG 1
-
 /* The structure below stores information about a system call.
    It is basically used in the "catch syscall" command, and in
    every function that gives information about a system call.

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