From f3fe8934c2449dc8c6d4063bc117073af2b65386 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Tue, 11 Jan 1994 18:45:05 +0000 Subject: [PATCH] * remote-mips.c (mips_wait): Use new function mips_signal_from_protocol to convert a signal number with appropriate bounds checking. --- gdb/ChangeLog | 3 +++ gdb/remote-mips.c | 32 ++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 24be966ca72..40c1a80eda0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,8 @@ Tue Jan 11 06:59:10 1994 Jim Kingdon (kingdon@deneb.cygnus.com) + * remote-mips.c (mips_wait): Use new function mips_signal_from_protocol + to convert a signal number with appropriate bounds checking. + * remote-mips.c (mips_wait): Fix typos (0x177 -> 0177, 0x377 -> 0377). Tue Jan 11 00:53:46 1994 John Gilmore (gnu@cygnus.com) diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c index 6fdf6bcc58b..ed27e4dfb39 100644 --- a/gdb/remote-mips.c +++ b/gdb/remote-mips.c @@ -1026,6 +1026,26 @@ mips_resume (pid, step, siggnal) mips_receive_wait); } +/* Return the signal corresponding to SIG, where SIG is the number which + the MIPS protocol uses for the signal. */ +enum target_signal +mips_signal_from_protocol (sig) + int sig; +{ + /* We allow a few more signals than the IDT board actually returns, on + the theory that there is at least *some* hope that perhaps the numbering + for these signals is widely agreed upon. */ + if (sig <= 0 + || sig > 31) + return TARGET_SIGNAL_UNKNOWN; + + /* Don't want to use target_signal_from_host because we are converting + from MIPS signal numbers, not host ones. Our internal numbers + match the MIPS numbers for the signals the board can return, which + are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP. */ + return (enum target_signal) sig; +} + /* Wait until the remote stops, and return a wait status. */ static int @@ -1062,20 +1082,12 @@ mips_wait (pid, status) else if ((rstatus & 0377) == 0177) { status->kind = TARGET_WAITKIND_STOPPED; - /* Don't want to use target_signal_from_host because we are converting - from MIPS signal numbers, not host ones. Our internal numbers - match the MIPS numbers for the signals the board can return, which - are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP. */ - status->value.sig = (enum target_signal) (((rstatus) >> 8) & 0377); + status->value.sig = mips_signal_from_protocol (((rstatus) >> 8) & 0377); } else { status->kind = TARGET_WAITKIND_SIGNALLED; - /* Don't want to use target_signal_from_host because we are converting - from MIPS signal numbers, not host ones. Our internal numbers - match the MIPS numbers for the signals the board can return, which - are: SIGINT, SIGSEGV, SIGBUS, SIGILL, SIGFPE, SIGTRAP. */ - status->value.sig = (enum target_signal) (rstatus & 0177); + status->value.sig = mips_signal_from_protocol (rstatus & 0177); } return 0; -- 2.30.2