From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9657 invoked by alias); 1 Jun 2012 22:52:49 -0000 Received: (qmail 9647 invoked by uid 22791); 1 Jun 2012 22:52:46 -0000 X-SWARE-Spam-Status: No, hits=-2.7 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED X-Spam-Check-By: sourceware.org Received: from shell4.bayarea.net (HELO shell4.bayarea.net) (209.128.82.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 01 Jun 2012 22:52:32 +0000 Received: (qmail 17606 invoked from network); 1 Jun 2012 15:52:31 -0700 Received: from c-76-102-3-160.hsd1.ca.comcast.net (HELO redwood.eagercon.com) (76.102.3.160) by shell4.bayarea.net with SMTP; 1 Jun 2012 15:52:31 -0700 Message-ID: <4FC947AE.2000008@eagerm.com> Date: Fri, 01 Jun 2012 22:52:00 -0000 From: Michael Eager User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 MIME-Version: 1.0 To: "Maciej W. Rozycki" CC: "gdb-patches@sourceware.org" , Pedro Alves Subject: Re: [PATCH] MIPS Linux signals References: <4FC9244F.1080704@eagerm.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------090900010406090402060907" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2012-06/txt/msg00048.txt.bz2 This is a multi-part message in MIME format. --------------090900010406090402060907 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 877 On 06/01/2012 01:53 PM, Maciej W. Rozycki wrote: > Hi Michael, > >> This patch adds a target function to translate MIPS Linux signals >> to GDB internal signal numbers. >> >> 2012-06-01 Michael Eager >> >> * mips-linux-tdep.c (mips_gdb_signal_from_target): New >> * mips-linux-tdep.h (mips_signals): New > > Thanks, please make a unified diff (`diff -up') next time. Further notes > below. Revised patch attached. Some of the awkward code in translating REALTIME signals is due to the fact that the GDB_SIGNAL_REALTIME block is not contiguous. I recast the section of code copied from signals.c in terms of MIPS_SIGRTMIN & MIPS_SIGRTMAX, but it isn't clear to me that this is an improvement, since it is now different from the similar code in signals.c. -- Michael Eager eager@eagercon.com 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077 --------------090900010406090402060907 Content-Type: text/x-patch; name="mips.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="mips.patch" Content-length: 6800 Index: gdb/ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/ChangeLog,v retrieving revision 1.14309 diff -u -p -r1.14309 ChangeLog --- gdb/ChangeLog 1 Jun 2012 16:37:56 -0000 1.14309 +++ gdb/ChangeLog 1 Jun 2012 22:43:51 -0000 @@ -1,3 +1,8 @@ +2012-06-01 Michael Eager + + * mips-linux-tdep.c (mips_gdb_signal_from_target): New + * mips-linux-tdep.h (mips_signals): New + 2012-06-01 Siddhesh Poyarekar * target.c (target_read_memory): Make LEN argument as size_t. Index: gdb/mips-linux-tdep.c =================================================================== RCS file: /cvs/src/src/gdb/mips-linux-tdep.c,v retrieving revision 1.94 diff -u -p -r1.94 mips-linux-tdep.c --- gdb/mips-linux-tdep.c 22 May 2012 17:12:07 -0000 1.94 +++ gdb/mips-linux-tdep.c 1 Jun 2012 22:43:51 -0000 @@ -40,6 +40,7 @@ #include "glibc-tdep.h" #include "linux-tdep.h" #include "xml-syscall.h" +#include "gdb_signals.h" static struct target_so_ops mips_svr4_so_ops; @@ -1330,6 +1331,98 @@ mips_linux_get_syscall_number (struct gd return ret; } +/* Translate signals based on MIPS signal values. + Adapted from gdb/common/signals.c. */ + +static enum gdb_signal +mips_gdb_signal_from_target (struct gdbarch *gdbarch, int signo) +{ + switch (signo) + { + case 0: + return GDB_SIGNAL_0; + case MIPS_SIGHUP: + return GDB_SIGNAL_HUP; + case MIPS_SIGINT: + return GDB_SIGNAL_INT; + case MIPS_SIGQUIT: + return GDB_SIGNAL_QUIT; + case MIPS_SIGILL: + return GDB_SIGNAL_ILL; + case MIPS_SIGTRAP: + return GDB_SIGNAL_TRAP; + case MIPS_SIGABRT: + return GDB_SIGNAL_ABRT; + case MIPS_SIGEMT: + return GDB_SIGNAL_EMT; + case MIPS_SIGFPE: + return GDB_SIGNAL_FPE; + case MIPS_SIGKILL: + return GDB_SIGNAL_KILL; + case MIPS_SIGBUS: + return GDB_SIGNAL_BUS; + case MIPS_SIGSEGV: + return GDB_SIGNAL_SEGV; + case MIPS_SIGSYS: + return GDB_SIGNAL_SYS; + case MIPS_SIGPIPE: + return GDB_SIGNAL_PIPE; + case MIPS_SIGALRM: + return GDB_SIGNAL_ALRM; + case MIPS_SIGTERM: + return GDB_SIGNAL_TERM; + case MIPS_SIGUSR1: + return GDB_SIGNAL_USR1; + case MIPS_SIGUSR2: + return GDB_SIGNAL_USR2; + case MIPS_SIGCHLD: + return GDB_SIGNAL_CHLD; + case MIPS_SIGPWR: + return GDB_SIGNAL_PWR; + case MIPS_SIGWINCH: + return GDB_SIGNAL_WINCH; + case MIPS_SIGURG: + return GDB_SIGNAL_URG; + case MIPS_SIGPOLL: + return GDB_SIGNAL_POLL; + case MIPS_SIGSTOP: + return GDB_SIGNAL_STOP; + case MIPS_SIGTSTP: + return GDB_SIGNAL_TSTP; + case MIPS_SIGCONT: + return GDB_SIGNAL_CONT; + case MIPS_SIGTTIN: + return GDB_SIGNAL_TTIN; + case MIPS_SIGTTOU: + return GDB_SIGNAL_TTOU; + case MIPS_SIGVTALRM: + return GDB_SIGNAL_VTALRM; + case MIPS_SIGPROF: + return GDB_SIGNAL_PROF; + case MIPS_SIGXCPU: + return GDB_SIGNAL_XCPU; + case MIPS_SIGXFSZ: + return GDB_SIGNAL_XFSZ; + } + + if (signo >= MIPS_SIGRTMIN && signo <= MIPS_SIGRTMAX) + { + /* This block of GDB_SIGNAL_REALTIME value is in order. */ + if (MIPS_SIGRTMIN <= signo && signo <= (MIPS_SIGRTMIN + 32)) + return ((enum gdb_signal) + (signo - MIPS_SIGRTMIN + 1 + (int) GDB_SIGNAL_REALTIME_33)); + else if (signo == MIPS_SIGRTMIN) + return GDB_SIGNAL_REALTIME_32; + else if ((MIPS_SIGRTMIN + 32) <= signo && signo <= MIPS_SIGRTMAX) + return ((enum gdb_signal) + (signo - (MIPS_SIGRTMIN + 32) + (int) GDB_SIGNAL_REALTIME_64)); + else + error ("GDB bug: unrecognized real-time signal"); + } + + return GDB_SIGNAL_UNKNOWN; +} + /* Initialize one of the GNU/Linux OS ABIs. */ static void @@ -1414,6 +1507,9 @@ mips_linux_init_abi (struct gdbarch_info set_gdbarch_regset_from_core_section (gdbarch, mips_linux_regset_from_core_section); + set_gdbarch_gdb_signal_from_target (gdbarch, + mips_gdb_signal_from_target); + tdep->syscall_next_pc = mips_linux_syscall_next_pc; if (tdesc_data) Index: gdb/mips-linux-tdep.h =================================================================== RCS file: /cvs/src/src/gdb/mips-linux-tdep.h,v retrieving revision 1.13 diff -u -p -r1.13 mips-linux-tdep.h --- gdb/mips-linux-tdep.h 1 Mar 2012 22:19:45 -0000 1.13 +++ gdb/mips-linux-tdep.h 1 Jun 2012 22:43:51 -0000 @@ -105,3 +105,45 @@ enum { /* Return 1 if MIPS_RESTART_REGNUM is usable. */ int mips_linux_restart_reg_p (struct gdbarch *gdbarch); + +/* MIPS Signals -- adapted from linux/arch/mips/include/asm/signal.h. */ + +enum mips_signals + { + MIPS_SIGHUP = 1, /* Hangup (POSIX). */ + MIPS_SIGINT = 2, /* Interrupt (ANSI). */ + MIPS_SIGQUIT = 3, /* Quit (POSIX). */ + MIPS_SIGILL = 4, /* Illegal instruction (ANSI). */ + MIPS_SIGTRAP = 5, /* Trace trap (POSIX). */ + MIPS_SIGIOT = 6, /* IOT trap (4.2 BSD). */ + MIPS_SIGABRT = MIPS_SIGIOT, /* Abort (ANSI). */ + MIPS_SIGEMT = 7, + MIPS_SIGFPE = 8, /* Floating-point exception (ANSI). */ + MIPS_SIGKILL = 9, /* Kill, unblockable (POSIX). */ + MIPS_SIGBUS = 10, /* BUS error (4.2 BSD). */ + MIPS_SIGSEGV = 11, /* Segmentation violation (ANSI). */ + MIPS_SIGSYS = 12, + MIPS_SIGPIPE = 13, /* Broken pipe (POSIX). */ + MIPS_SIGALRM = 14, /* Alarm clock (POSIX). */ + MIPS_SIGTERM = 15, /* Termination (ANSI). */ + MIPS_SIGUSR1 = 16, /* User-defined signal 1 (POSIX). */ + MIPS_SIGUSR2 = 17, /* User-defined signal 2 (POSIX). */ + MIPS_SIGCHLD = 18, /* Child status has changed (POSIX). */ + MIPS_SIGCLD = MIPS_SIGCHLD, /* Same as SIGCHLD (System V). */ + MIPS_SIGPWR = 19, /* Power failure restart (System V). */ + MIPS_SIGWINCH = 20, /* Window size change (4.3 BSD, Sun). */ + MIPS_SIGURG = 21, /* Urgent condition on socket (4.2 BSD). */ + MIPS_SIGIO = 22, /* I/O now possible (4.2 BSD). */ + MIPS_SIGPOLL = MIPS_SIGIO, /* Pollable event occurred (System V). */ + MIPS_SIGSTOP = 23, /* Stop, unblockable (POSIX). */ + MIPS_SIGTSTP = 24, /* Keyboard stop (POSIX). */ + MIPS_SIGCONT = 25, /* Continue (POSIX). */ + MIPS_SIGTTIN = 26, /* Background read from tty (POSIX). */ + MIPS_SIGTTOU = 27, /* Background write to tty (POSIX). */ + MIPS_SIGVTALRM = 28, /* Virtual alarm clock (4.2 BSD). */ + MIPS_SIGPROF = 29, /* Profiling alarm clock (4.2 BSD). */ + MIPS_SIGXCPU = 30, /* CPU limit exceeded (4.2 BSD). */ + MIPS_SIGXFSZ = 31, /* File size limit exceeded (4.2 BSD). */ + MIPS_SIGRTMIN = 32, /* Minimum RT signal. */ + MIPS_SIGRTMAX = 128 - 1 /* Maximum RT signal. */ + }; --------------090900010406090402060907--