From: Luis Machado Date: Mon, 19 Aug 2013 16:54:11 +0000 (+0000) Subject: gdb/ X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=33b60d58316e0ce994c009e1a9bede277538b69e;p=deliverable%2Fbinutils-gdb.git gdb/ * Makefile.in (SFILES): Remove common/target-common.c and add target/waitstatus.c. (HFILES_NO_SRCDIR): Remove common/target-common.h and add target/resume.h, target/wait.h and target/waitstatus.h. (COMMON_OBS): Remove target-common.o and add waitstatus.o. (target-common.o): Remove. (waitstatus.o): New target object file. * common/target-common.c: Move contents to target/waitstatus.c and remove. * common/target-common.h: Move contents to other files and remove. (enum resume_kind: Move to target/resume.h. (TARGET_WNOHANG): Move to target/wait.h. (enum target_waitkind): Move to target/waitstatus.h. (struct target_waitstatus): Likewise. * target.h: Do not include target-common.h and include target/resume.h, target/wait.h and target/waitstatus.h. * target/resume.h: New file. * target/wait.h: New file. * target/waitstatus.h: New file. * target/waitstatus.c: New file. gdb/gdbserver/ * Makefile.in (INCLUDE_CFLAGS): Include -I$(srcdir)/../. (SFILES): Remove $(srcdir)/common/target-common.c and add $(srcdir)/target/waitstatus.c. (OBS): Remove target-common.o and add waitstatus.o. (server_h): Remove $(srcdir)/../common/target-common.h and add $(srcdir)/../target/resume.h, $(srcdir)/../target/wait.h and $(srcdir)/../target/waitstatus.h. (target-common.o): Remove. (waitstatus.o): New target object file. * target.h: Do not include target-common.h and include target/resume.h, target/wait.h and target/waitstatus.h. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ef51a9f923..06e25dafb7 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,29 @@ +2013-08-19 Luis Machado + + * Makefile.in (SFILES): Remove common/target-common.c and + add target/waitstatus.c. + (HFILES_NO_SRCDIR): Remove common/target-common.h and add + target/resume.h, target/wait.h and target/waitstatus.h. + (COMMON_OBS): Remove target-common.o and add + waitstatus.o. + (target-common.o): Remove. + (waitstatus.o): New target object file. + * common/target-common.c: Move contents to + target/waitstatus.c and remove. + * common/target-common.h: Move contents to other files and + remove. + (enum resume_kind: Move to target/resume.h. + (TARGET_WNOHANG): Move to target/wait.h. + (enum target_waitkind): Move to target/waitstatus.h. + (struct target_waitstatus): Likewise. + * target.h: Do not include target-common.h and + include target/resume.h, target/wait.h and + target/waitstatus.h. + * target/resume.h: New file. + * target/wait.h: New file. + * target/waitstatus.h: New file. + * target/waitstatus.c: New file. + 2013-08-19 Pedro Alves * linux-nat.c (linux_test_for_tracefork) diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 917194007e..45cddafa3c 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -775,7 +775,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.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/target-common.c + target/waitstatus.c LINTFILES = $(SFILES) $(YYFILES) $(CONFIG_SRCS) init.c @@ -854,7 +854,8 @@ 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 common/target-common.h +ctf.h common/i386-cpuid.h common/i386-gcc-cpuid.h target/resume.h \ +target/wait.h target/waitstatus.h # Header files that already have srcdir in them, or which are in objdir. @@ -948,7 +949,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 target-common.o + format.o registry.o btrace.o record-btrace.o waitstatus.o TSOBS = inflow.o @@ -2022,14 +2023,20 @@ 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) - mips-linux-watch.o: ${srcdir}/common/mips-linux-watch.c $(COMPILE) $(srcdir)/common/mips-linux-watch.c $(POSTCOMPILE) +# +# gdb/target/ dependencies +# +# Need to explicitly specify the compile rule as make will do nothing +# or try to compile the object file into the sub-directory. + +waitstatus.o: ${srcdir}/target/waitstatus.c + $(COMPILE) $(srcdir)/target/waitstatus.c + $(POSTCOMPILE) + # # gdb/tui/ dependencies # diff --git a/gdb/common/target-common.c b/gdb/common/target-common.c deleted file mode 100644 index 2edbb2a1bd..0000000000 --- a/gdb/common/target-common.c +++ /dev/null @@ -1,78 +0,0 @@ -/* 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 deleted file mode 100644 index d4d73f6307..0000000000 --- a/gdb/common/target-common.h +++ /dev/null @@ -1,149 +0,0 @@ -/* 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 375eadaebc..93fdb87a41 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,18 @@ +2013-08-19 Luis Machado + + * Makefile.in (INCLUDE_CFLAGS): Include -I$(srcdir)/../. + (SFILES): Remove $(srcdir)/common/target-common.c and + add $(srcdir)/target/waitstatus.c. + (OBS): Remove target-common.o and add waitstatus.o. + (server_h): Remove $(srcdir)/../common/target-common.h and + add $(srcdir)/../target/resume.h, $(srcdir)/../target/wait.h + and $(srcdir)/../target/waitstatus.h. + (target-common.o): Remove. + (waitstatus.o): New target object file. + * target.h: Do not include target-common.h and + include target/resume.h, target/wait.h and + target/waitstatus.h. + 2013-08-13 Luis Machado * linux-arm-low.c: Rename all occurrences of PTRACE_ARG3_TYPE diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index e541497938..2cdbf47bff 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -101,7 +101,7 @@ GNULIB_H = $(GNULIB_BUILDDIR)/import/string.h @GNULIB_STDINT_H@ # -I${srcdir} for our headers. # -I$(srcdir)/../regformats for regdef.h. INCLUDE_CFLAGS = -I. -I${srcdir} -I$(srcdir)/../common \ - -I$(srcdir)/../regformats -I$(INCLUDE_DIR) \ + -I$(srcdir)/../regformats -I$(srcdir)/../ -I$(INCLUDE_DIR) \ $(INCGNU) # M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS @@ -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/target-common.c \ + $(srcdir)/common/filestuff.c $(srcdir)/target/waitstatus.c \ $(srcdir)/common/mips-linux-watch.c DEPFILES = @GDBSERVER_DEPFILES@ @@ -168,7 +168,7 @@ 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 target-common.o utils.o version.o vec.o gdb_vecs.o \ + target.o waitstatus.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) @@ -437,7 +437,9 @@ 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 \ + $(srcdir)/../target/resume.h \ + $(srcdir)/../target/wait.h \ + $(srcdir)/../target/waitstatus.h \ $(ptid_h) \ $(signals_h) \ $(libiberty_h) \ @@ -550,7 +552,7 @@ filestuff.o: ../common/filestuff.c agent.o: ../common/agent.c $(COMPILE) $< $(POSTCOMPILE) -target-common.o: ../common/target-common.c +waitstatus.o: ../target/waitstatus.c $(COMPILE) $< $(POSTCOMPILE) diff --git a/gdb/gdbserver/target.h b/gdb/gdbserver/target.h index d064b79ab5..7629b14a9a 100644 --- a/gdb/gdbserver/target.h +++ b/gdb/gdbserver/target.h @@ -21,7 +21,9 @@ #ifndef TARGET_H #define TARGET_H -#include "target-common.h" +#include "target/resume.h" +#include "target/wait.h" +#include "target/waitstatus.h" struct emit_ops; struct btrace_target_info; diff --git a/gdb/target.h b/gdb/target.h index 1d73bcd07f..d538e02864 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -57,7 +57,9 @@ struct expression; it goes into the file stratum, which is always below the process stratum. */ -#include "target-common.h" +#include "target/resume.h" +#include "target/wait.h" +#include "target/waitstatus.h" #include "bfd.h" #include "symtab.h" #include "memattr.h" diff --git a/gdb/target/resume.h b/gdb/target/resume.h new file mode 100644 index 0000000000..bb7a38c63c --- /dev/null +++ b/gdb/target/resume.h @@ -0,0 +1,37 @@ +/* Target resumption definitions and prototypes. + + Copyright (C) 1990-2013 Free Software Foundation, Inc. + + 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 RESUME_H +#define RESUME_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 +}; + +#endif /* RESUME_H */ diff --git a/gdb/target/wait.h b/gdb/target/wait.h new file mode 100644 index 0000000000..a5f18b522d --- /dev/null +++ b/gdb/target/wait.h @@ -0,0 +1,30 @@ +/* Target wait definitions and prototypes. + + Copyright (C) 1990-2013 Free Software Foundation, Inc. + + 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 WAIT_H +#define WAIT_H + +/* 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 + +#endif /* WAIT_H */ diff --git a/gdb/target/waitstatus.c b/gdb/target/waitstatus.c new file mode 100644 index 0000000000..e6b850268b --- /dev/null +++ b/gdb/target/waitstatus.c @@ -0,0 +1,72 @@ +/* Target waitstatus implementations. + + Copyright (C) 1990-2013 Free Software Foundation, Inc. + + 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 + +#include "waitstatus.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/target/waitstatus.h b/gdb/target/waitstatus.h new file mode 100644 index 0000000000..cafbf15e6e --- /dev/null +++ b/gdb/target/waitstatus.h @@ -0,0 +1,126 @@ +/* Target waitstatus definitions and prototypes. + + Copyright (C) 1990-2013 Free Software Foundation, Inc. + + 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 WAITSTATUS_H +#define WAITSTATUS_H + +#include "common-utils.h" +#include "ptid.h" +#include "gdb_signals.h" + +/* 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; +}; + +/* 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 /* WAITSTATUS_H */