From: Sergio Durigan Junior <sergiodj@redhat.com>
To: GDB Patches <gdb-patches@sourceware.org>
Cc: Sergio Durigan Junior <sergiodj@redhat.com>
Subject: [PATCH 17/17] MIPS support
Date: Mon, 01 Jul 2013 07:43:00 -0000 [thread overview]
Message-ID: <1372664545-3947-18-git-send-email-sergiodj@redhat.com> (raw)
In-Reply-To: <1372664545-3947-1-git-send-email-sergiodj@redhat.com>
Support for the MIPS target. This is probably going to cause some
discussion/bikeshed.
MIPS already has a definition of its signals inside mips-linux-tdep.h
(see enum mips_signals). I could have used them, but I chose to
follow the standard and implement an enum containing only differences
between MIPS and x86 signals. In the battle between code duplication
and code standardization, the latter won (in my head, at least). But I
am totally open to suggestions, and I even believe I know what I will
hear: "Please, use mips_signals".
Anyway, I thought it was worth raising this point here.
As a side note, if "use mips_signals" wins, I intend to rename the
elements in the enum to MIPS_LINUX_SIG*, instead of just using
MIPS_SIG*. I guess that won't hurt.
2013-07-01 Sergio Durigan Junior <sergiodj@redhat.com>
* mips-linux-tdep.c: Define enum with differences between
* signals in MIPS and x86.
(mips_gdb_signal_to_target): New function.
(mips_linux_init_abi): Set gdbarch_gdb_signal_to_target to
mips_gdb_signal_to_target.
---
gdb/mips-linux-tdep.c | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 132 insertions(+)
diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c
index 484b39f..3aa6971 100644
--- a/gdb/mips-linux-tdep.c
+++ b/gdb/mips-linux-tdep.c
@@ -45,6 +45,42 @@
static struct target_so_ops mips_svr4_so_ops;
+/* This enum represents the signals' numbers on the MIPS
+ architecture. It just contains the signal definitions which are
+ different from x86.
+
+ It is derived from the file <arch/mips/include/uapi/asm/signal.h>,
+ from the Linux kernel tree. */
+
+enum
+ {
+ MIPS_LINUX_SIGEMT = 7,
+ MIPS_LINUX_SIGBUS = 10,
+ MIPS_LINUX_SIGSYS = 12,
+ MIPS_LINUX_SIGUSR1 = 16,
+ MIPS_LINUX_SIGUSR2 = 17,
+ MIPS_LINUX_SIGCHLD = 18,
+ MIPS_LINUX_SIGCLD = MIPS_LINUX_SIGCHLD,
+ MIPS_LINUX_SIGPWR = 19,
+ MIPS_LINUX_SIGWINCH = 20,
+ MIPS_LINUX_SIGURG = 21,
+ MIPS_LINUX_SIGIO = 22,
+ MIPS_LINUX_SIGPOLL = MIPS_LINUX_SIGIO,
+ MIPS_LINUX_SIGSTOP = 23,
+ MIPS_LINUX_SIGTSTP = 24,
+ MIPS_LINUX_SIGCONT = 25,
+ MIPS_LINUX_SIGTTIN = 26,
+ MIPS_LINUX_SIGTTOU = 27,
+ MIPS_LINUX_SIGVTALRM = 28,
+ MIPS_LINUX_SIGPROF = 29,
+ MIPS_LINUX_SIGXCPU = 30,
+ MIPS_LINUX_SIGXFSZ = 31,
+
+ MIPS_LINUX_SIGRTMIN = 32,
+ MIPS_LINUX_SIGRT64 = 64,
+ MIPS_LINUX_SIGRTMAX = 127,
+ };
+
/* Figure out where the longjmp will land.
We expect the first arg to be a pointer to the jmp_buf structure
from which we extract the pc (MIPS_LINUX_JB_PC) that we will land
@@ -1339,6 +1375,99 @@ mips_linux_get_syscall_number (struct gdbarch *gdbarch,
return ret;
}
+/* Implementation of `gdbarch_gdb_signal_to_target', as defined in
+ gdbarch.h. */
+
+static int
+mips_gdb_signal_to_target (struct gdbarch *gdbarch,
+ enum gdb_signal signal)
+{
+ switch (signal)
+ {
+ case GDB_SIGNAL_EMT:
+ return MIPS_LINUX_SIGEMT;
+
+ case GDB_SIGNAL_BUS:
+ return MIPS_LINUX_SIGBUS;
+
+ case GDB_SIGNAL_SYS:
+ return MIPS_LINUX_SIGSYS;
+
+ case GDB_SIGNAL_USR1:
+ return MIPS_LINUX_SIGUSR1;
+
+ case GDB_SIGNAL_USR2:
+ return MIPS_LINUX_SIGUSR2;
+
+ case GDB_SIGNAL_CHLD:
+ return MIPS_LINUX_SIGCHLD;
+
+ case GDB_SIGNAL_PWR:
+ return MIPS_LINUX_SIGPWR;
+
+ case GDB_SIGNAL_WINCH:
+ return MIPS_LINUX_SIGWINCH;
+
+ case GDB_SIGNAL_URG:
+ return MIPS_LINUX_SIGURG;
+
+ case GDB_SIGNAL_IO:
+ return MIPS_LINUX_SIGIO;
+
+ case GDB_SIGNAL_POLL:
+ return MIPS_LINUX_SIGPOLL;
+
+ case GDB_SIGNAL_STOP:
+ return MIPS_LINUX_SIGSTOP;
+
+ case GDB_SIGNAL_TSTP:
+ return MIPS_LINUX_SIGTSTP;
+
+ case GDB_SIGNAL_CONT:
+ return MIPS_LINUX_SIGCONT;
+
+ case GDB_SIGNAL_TTIN:
+ return MIPS_LINUX_SIGTTIN;
+
+ case GDB_SIGNAL_TTOU:
+ return MIPS_LINUX_SIGTTOU;
+
+ case GDB_SIGNAL_VTALRM:
+ return MIPS_LINUX_SIGVTALRM;
+
+ case GDB_SIGNAL_PROF:
+ return MIPS_LINUX_SIGPROF;
+
+ case GDB_SIGNAL_XCPU:
+ return MIPS_LINUX_SIGXCPU;
+
+ case GDB_SIGNAL_XFSZ:
+ return MIPS_LINUX_SIGXFSZ;
+
+ /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
+ therefore we have to handle it here. */
+ case GDB_SIGNAL_REALTIME_32:
+ return MIPS_LINUX_SIGRTMIN;
+ }
+
+ if (signal >= GDB_SIGNAL_REALTIME_33
+ && signal <= GDB_SIGNAL_REALTIME_63)
+ {
+ int offset = signal - GDB_SIGNAL_REALTIME_33;
+
+ return MIPS_LINUX_SIGRTMIN + 1 + offset;
+ }
+ else if (signal >= GDB_SIGNAL_REALTIME_64
+ && signal <= GDB_SIGNAL_REALTIME_127)
+ {
+ int offset = signal - GDB_SIGNAL_REALTIME_64;
+
+ return MIPS_LINUX_SIGRT64 + offset;
+ }
+
+ return linux_gdb_signal_to_target (gdbarch, signal);
+}
+
/* Translate signals based on MIPS signal values.
Adapted from gdb/common/signals.c. */
@@ -1516,6 +1645,9 @@ mips_linux_init_abi (struct gdbarch_info info,
set_gdbarch_gdb_signal_from_target (gdbarch,
mips_gdb_signal_from_target);
+ set_gdbarch_gdb_signal_to_target (gdbarch,
+ mips_gdb_signal_to_target);
+
tdep->syscall_next_pc = mips_linux_syscall_next_pc;
if (tdesc_data)
--
1.7.11.7
next prev parent reply other threads:[~2013-07-01 7:43 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-01 7:43 [PATCH 00/17] Implement gdbarch_gdb_signal_to_target Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 11/17] m32r support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 02/17] Linux kernel generic support Sergio Durigan Junior
2013-07-01 10:57 ` Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 10/17] IA-64 support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 05/17] ARM support Sergio Durigan Junior
2013-07-17 17:20 ` Tom Tromey
2013-07-25 6:25 ` Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 09/17] i386 support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 08/17] h8300 support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 15/17] SPARC support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 13/17] mn10300 support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 14/17] s390 support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 03/17] Alpha support Sergio Durigan Junior
2013-07-01 7:43 ` Sergio Durigan Junior [this message]
2013-07-17 17:59 ` [PATCH 17/17] MIPS support Tom Tromey
2013-07-25 6:20 ` Sergio Durigan Junior
2013-07-29 20:15 ` Pedro Alves
2013-07-01 7:43 ` [PATCH 12/17] m68klinux support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 01/17] Implement the gdbarch.{sh,c,h} bits Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 16/17] Xtensa support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 07/17] Cris support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 06/17] AVR support Sergio Durigan Junior
2013-07-01 7:43 ` [PATCH 04/17] x86_64 support Sergio Durigan Junior
2013-07-17 17:16 ` Tom Tromey
2013-07-17 19:00 ` Mark Kettenis
2013-07-17 19:11 ` Sergio Durigan Junior
2013-07-01 8:43 ` [PATCH 00/17] Implement gdbarch_gdb_signal_to_target Andreas Schwab
2013-07-01 10:40 ` Sergio Durigan Junior
2013-07-01 10:44 ` Pedro Alves
2013-07-01 10:59 ` Sergio Durigan Junior
2013-07-01 10:46 ` [PATCH 18/18] AArch64 support Sergio Durigan Junior
2013-07-08 23:08 ` [ping][PATCH 00/17] Implement gdbarch_gdb_signal_to_target Sergio Durigan Junior
2013-07-17 18:02 ` [PATCH " Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1372664545-3947-18-git-send-email-sergiodj@redhat.com \
--to=sergiodj@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox