From: Luis Machado Date: Wed, 24 Jul 2013 16:20:12 +0000 (+0000) Subject: gdb/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3360c0bf75c98188a29b2ea29183a0bdc33b5801;p=binutils-gdb.git 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/ChangeLog b/gdb/ChangeLog index 70621e4257f..672fb5ddebf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,19 @@ +2013-07-24 Luis Machado + + * 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 * 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 . */ + +#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 . */ + +#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 + + * 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 * 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.