diff options
Diffstat (limited to 'gdbsupport/gdb_wait.h')
-rw-r--r-- | gdbsupport/gdb_wait.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/gdbsupport/gdb_wait.h b/gdbsupport/gdb_wait.h new file mode 100644 index 0000000..3563b9c --- /dev/null +++ b/gdbsupport/gdb_wait.h @@ -0,0 +1,135 @@ +/* Standard wait macros. + Copyright (C) 2000-2020 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 <http://www.gnu.org/licenses/>. */ + +#ifndef COMMON_GDB_WAIT_H +#define COMMON_GDB_WAIT_H + +#ifdef HAVE_SYS_WAIT_H +#include <sys/wait.h> /* POSIX */ +#else +#ifdef HAVE_WAIT_H +#include <wait.h> /* legacy */ +#endif +#endif + +/* Define how to access the int that the wait system call stores. + This has been compatible in all Unix systems since time immemorial, + but various well-meaning people have defined various different + words for the same old bits in the same old int (sometimes claimed + to be a struct). We just know it's an int and we use these macros + to access the bits. */ + +/* The following macros are defined equivalently to their definitions + in POSIX.1. We fail to define WNOHANG and WUNTRACED, which POSIX.1 + <sys/wait.h> defines, since our code does not use waitpid() (but + NOTE exception for GNU/Linux below). We also fail to declare + wait() and waitpid(). + + For MinGW, we use the fact that when a Windows program is + terminated by a fatal exception, its exit code is the value of that + exception, as defined by the various EXCEPTION_* symbols in the + Windows API headers. See also gdb_wait.c. */ + +#ifndef WIFEXITED +# ifdef __MINGW32__ +# define WIFEXITED(w) (((w) & 0xC0000000) == 0) +# else +# define WIFEXITED(w) (((w)&0377) == 0) +# endif +#endif + +#ifndef WIFSIGNALED +# ifdef __MINGW32__ +# define WIFSIGNALED(w) (((w) & 0xC0000000) == 0xC0000000) +# else +# define WIFSIGNALED(w) (((w)&0377) != 0177 && ((w)&~0377) == 0) +# endif +#endif + +#ifndef WIFSTOPPED +#ifdef IBM6000 + +/* Unfortunately, the above comment (about being compatible in all Unix + systems) is not quite correct for AIX, sigh. And AIX 3.2 can generate + status words like 0x57c (sigtrap received after load), and gdb would + choke on it. */ + +#define WIFSTOPPED(w) ((w)&0x40) + +#else +#define WIFSTOPPED(w) (((w)&0377) == 0177) +#endif +#endif + +#ifndef WEXITSTATUS +# ifdef __MINGW32__ +# define WEXITSTATUS(w) ((w) & ~0xC0000000) +# else +# define WEXITSTATUS(w) (((w) >> 8) & 0377) /* same as WRETCODE */ +# endif +#endif + +#ifndef WTERMSIG +# ifdef __MINGW32__ +extern int windows_status_to_termsig (unsigned long); +# define WTERMSIG(w) windows_status_to_termsig (w) +# else +# define WTERMSIG(w) ((w) & 0177) +# endif +#endif + +#ifndef WSTOPSIG +#define WSTOPSIG WEXITSTATUS +#endif + +/* These are not defined in POSIX, but are used by our programs. */ + +#ifndef WSETEXIT +# ifdef W_EXITCODE +#define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0)) +# else +#define WSETEXIT(w,status) ((w) = (0 | ((status) << 8))) +# endif +#endif + +#ifndef W_STOPCODE +#define W_STOPCODE(sig) ((sig) << 8 | 0x7f) +#endif + +#ifndef WSETSTOP +#define WSETSTOP(w,sig) ((w) = W_STOPCODE(sig)) +#endif + +/* For native GNU/Linux we may use waitpid and the __WCLONE option. + <GRIPE> It is of course dangerous not to use the REAL header file... + </GRIPE>. */ + +/* Bits in the third argument to `waitpid'. */ +#ifndef WNOHANG +#define WNOHANG 1 /* Don't block waiting. */ +#endif + +#ifndef WUNTRACED +#define WUNTRACED 2 /* Report status of stopped children. */ +#endif + +#ifndef __WCLONE +#define __WCLONE 0x80000000 /* Wait for cloned process. */ +#endif + +#endif /* COMMON_GDB_WAIT_H */ |