summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorLuis Machado <luisgpm@br.ibm.com>2013-07-24 16:20:11 +0000
committerLuis Machado <luisgpm@br.ibm.com>2013-07-24 16:20:11 +0000
commit0387eeea5b1bd190f27e85448b9a8a93e2bd438a (patch)
tree9bbe87d60ad03323c5999f378d738812be34c261 /gdb
parentaaff6f779cacd457a586a620f36999b8c5de937f (diff)
downloadgdb-0387eeea5b1bd190f27e85448b9a8a93e2bd438a.tar.gz
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.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog16
-rw-r--r--gdb/Makefile.in11
-rw-r--r--gdb/common/target-common.c78
-rw-r--r--gdb/common/target-common.h149
-rw-r--r--gdb/gdbserver/ChangeLog15
-rw-r--r--gdb/gdbserver/Makefile.in18
-rw-r--r--gdb/gdbserver/server.c15
-rw-r--r--gdb/gdbserver/target.c42
-rw-r--r--gdb/gdbserver/target.h69
-rw-r--r--gdb/linux-nat.h14
-rw-r--r--gdb/target.c46
-rw-r--r--gdb/target.h101
12 files changed, 290 insertions, 284 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 70621e4257f..672fb5ddebf 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,19 @@
+2013-07-24 Luis Machado <lgustavo@codesourcery.com>
+
+ * 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.
+
2013-07-24 Doug Evans <dje@google.com>
* dwarf2read.c (lookup_dwo_cutu): Change missing DWO complaint to
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index a51afcbd2bd..2d574d4228a 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 00000000000..2edbb2a1bd1
--- /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 00000000000..d4d73f6307e
--- /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/ChangeLog b/gdb/gdbserver/ChangeLog
index 3d963ead3c8..4af17efdfbe 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,18 @@
+2013-07-24 Luis Machado <lgustavo@codesourcery.com>
+
+ * 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.
+
2013-07-04 Yao Qi <yao@codesourcery.com>
* Makefile.in (host_alias): Use @host_noncanonical@.
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 2cbf20807f5..b28f743209d 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 a172c98f6f1..a4b9129bbfd 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 3a28099855d..a47053c78fa 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 c57cb40deb2..d064b79ab5a 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 3de866d5ed3..cb8f1dacce8 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 bc52ec4e373..18e10cbdced 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 9ea87bb7be8..e413e5590ea 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.