[RFAv3 2/6] Improve process exit status macros on MinGW
Hannes Domani via gdb-patches
gdb-patches@sourceware.org
Mon Jan 6 17:47:00 GMT 2020
While locally fixing a merge-conflict I noticed the following:
Am Freitag, 3. Januar 2020, 20:59:45 MEZ hat Pedro Alves <palves@redhat.com> Folgendes geschrieben:
> Here's the updated patch. I confirmed that it builds on MinGW-W64
> using my Fedora's cross cross compiler, but I didn't try to run
> the resulting GDB (since I'm not on Windows).
> diff --git a/gdb/windows-tdep.c b/gdb/windows-tdep.c
> index ca9b81df298..58f8838b885 100644
> --- a/gdb/windows-tdep.c
> +++ b/gdb/windows-tdep.c
> @@ -35,6 +35,57 @@
> #include "solib-target.h"
> #include "gdbcore.h"
>
> +/* Windows signal numbers differ between MinGW flavors and between
> + those and Cygwin. The below enumeration was gleaned from the
> + respective headers; the ones marked with MinGW64/Cygwin are defined
> + only by MinGW64 and Cygwin, not by mingw.org's MinGW. FIXME: We
> + should really have distinct MinGW vs Cygwin OSABIs, and two
> + separate enums, selected at runtime. */
> +
> +enum
> + {
> + WINDOWS_SIGHUP = 1, /* MinGW64/Cygwin */
> + WINDOWS_SIGINT = 2,
> + WINDOWS_SIGQUIT = 3, /* MinGW64/Cygwin */
> + WINDOWS_SIGILL = 4,
> + WINDOWS_SIGTRAP = 5, /* MinGW64/Cygwin */
> +#ifdef __CYGWIN__
> + WINDOWS_SGABRT = 6,
> +#else
> + WINDOWS_SIGIOT = 6, /* MinGW64 */
> +#endif
> + WINDOWS_SIGEMT = 7, /* MinGW64/Cygwin */
> + WINDOWS_SIGFPE = 8,
> + WINDOWS_SIGKILL = 9, /* MinGW64/Cygwin */
> + WINDOWS_SIGBUS = 10, /* MinGW64/Cygwin */
> + WINDOWS_SIGSEGV = 11,
> + WINDOWS_SIGSYS = 12, /* MinGW64/Cygwin */
> + WINDOWS_SIGPIPE = 13,/* MinGW64/Cygwin */
> + WINDOWS_SIGALRM = 14,/* MinGW64/Cygwin */
> + WINDOWS_SIGTERM = 15,
> +#ifdef __CYGWIN__
> + WINDOWS_SIGURG = 16,
> + WINDOWS_SIGSTOP = 17,
> + WINDOWS_SIGTSTP = 18,
> + WINDOWS_SIGCONT = 19,
> + WINDOWS_SIGCHLD = 20,
> + WINDOWS_SIGTTIN = 21,
> + WINDOWS_SIGTTOU = 22,
> + WINDOWS_SIGIO = 23,
> + WINDOWS_SIGXCPU = 24,
> + WINDOWS_SIGXFSZ = 25,
> + WINDOWS_SIGVTALRM = 26,
> + WINDOWS_SIGPROF = 27,
> + WINDOWS_SIGWINCH = 28,
> + WINDOWS_SIGLOST = 29,
> + WINDOWS_SIGUSR1 = 30,
> + WINDOWS_SIGUSR2 = 31
> +#else
> + WINDOWS_SIGBREAK = 21,
> + WINDOWS_SIGABRT = 22
> +#endif
> + };
For __CYGWIN__ it's WINDOWS_SGABRT, otherwise it's WINDOWS_SIGABRT.
> +
> struct cmd_list_element *info_w32_cmdlist;
>
> typedef struct thread_information_block_32
> @@ -461,6 +512,83 @@ init_w32_command_list (void)
> }
> }
>
> +/* Implementation of `gdbarch_gdb_signal_to_target'. */
> +
> +static int
> +windows_gdb_signal_to_target (struct gdbarch *gdbarch, enum gdb_signal signal)
> +{
> + switch (signal)
> + {
> + case GDB_SIGNAL_0:
> + return 0;
> + case GDB_SIGNAL_HUP:
> + return WINDOWS_SIGHUP;
> + case GDB_SIGNAL_INT:
> + return WINDOWS_SIGINT;
> + case GDB_SIGNAL_QUIT:
> + return WINDOWS_SIGQUIT;
> + case GDB_SIGNAL_ILL:
> + return WINDOWS_SIGILL;
> + case GDB_SIGNAL_TRAP:
> + return WINDOWS_SIGTRAP;
> + case GDB_SIGNAL_ABRT:
> + return WINDOWS_SIGABRT;
I don't think this compiles for cygwin.
> + case GDB_SIGNAL_EMT:
> + return WINDOWS_SIGEMT;
> + case GDB_SIGNAL_FPE:
> + return WINDOWS_SIGFPE;
> + case GDB_SIGNAL_KILL:
> + return WINDOWS_SIGKILL;
> + case GDB_SIGNAL_BUS:
> + return WINDOWS_SIGBUS;
> + case GDB_SIGNAL_SEGV:
> + return WINDOWS_SIGSEGV;
> + case GDB_SIGNAL_SYS:
> + return WINDOWS_SIGSYS;
> + case GDB_SIGNAL_PIPE:
> + return WINDOWS_SIGPIPE;
> + case GDB_SIGNAL_ALRM:
> + return WINDOWS_SIGALRM;
> + case GDB_SIGNAL_TERM:
> + return WINDOWS_SIGTERM;
> +#ifdef __CYGWIN__
> + case GDB_SIGNAL_URG:
> + return WINDOWS_SIGURG;
> + case GDB_SIGNAL_STOP:
> + return WINDOWS_SIGSTOP;
> + case GDB_SIGNAL_TSTP:
> + return WINDOWS_SIGTSTP;
> + case GDB_SIGNAL_CONT:
> + return WINDOWS_SIGCONT;
> + case GDB_SIGNAL_CHLD:
> + return WINDOWS_SIGCHLD;
> + case GDB_SIGNAL_TTIN:
> + return WINDOWS_SIGTTIN;
> + case GDB_SIGNAL_TTOU:
> + return WINDOWS_SIGTTOU;
> + case GDB_SIGNAL_IO:
> + return WINDOWS_SIGIO;
> + case GDB_SIGNAL_XCPU:
> + return WINDOWS_SIGXCPU;
> + case GDB_SIGNAL_XFSZ:
> + return WINDOWS_SIGXFSZ;
> + case GDB_SIGNAL_VTALRM:
> + return WINDOWS_SIGVTALRM;
> + case GDB_SIGNAL_PROF:
> + return WINDOWS_SIGPROF;
> + case GDB_SIGNAL_WINCH:
> + return WINDOWS_SIGWINCH;
> + case GDB_SIGNAL_PWR:
> + return WINDOWS_SIGLOST;
> + case GDB_SIGNAL_USR1:
> + return WINDOWS_SIGUSR1;
> + case GDB_SIGNAL_USR2:
> + return WINDOWS_SIGUSR2;
> +#endif /* __CYGWIN__ */
> + }
> + return -1;
> +}
> +
> /* To be called from the various GDB_OSABI_CYGWIN handlers for the
> various Windows architectures and machine types. */
>
> @@ -477,6 +605,8 @@ windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
> set_gdbarch_iterate_over_objfiles_in_search_order
> (gdbarch, windows_iterate_over_objfiles_in_search_order);
>
> + set_gdbarch_gdb_signal_to_target (gdbarch, windows_gdb_signal_to_target);
> +
> set_solib_ops (gdbarch, &solib_target_so_ops);
> }
>
>
> base-commit: 44f81a76542dbeada2541a05de191ae0ac0fbc2c
> --
> 2.14.5
More information about the Gdb-patches
mailing list