aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog3
-rw-r--r--gdb/remote-mips.c32
2 files changed, 25 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 24be966..40c1a80 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 6fdf6bc..ed27e4d 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;