From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31040 invoked by alias); 1 Jul 2013 07:43:06 -0000 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 Received: (qmail 30953 invoked by uid 89); 1 Jul 2013 07:43:02 -0000 X-Spam-SWARE-Status: No, score=-6.9 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_HOSTKARMA_W,RCVD_IN_HOSTKARMA_WL,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Mon, 01 Jul 2013 07:43:01 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r617gxEq023686 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 1 Jul 2013 03:43:00 -0400 Received: from psique.redhat.com (ovpn-113-175.phx2.redhat.com [10.3.113.175]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r617gssO017377; Mon, 1 Jul 2013 03:42:58 -0400 From: Sergio Durigan Junior To: GDB Patches Cc: Sergio Durigan Junior Subject: [PATCH 03/17] Alpha support Date: Mon, 01 Jul 2013 07:43:00 -0000 Message-Id: <1372664545-3947-4-git-send-email-sergiodj@redhat.com> In-Reply-To: <1372664545-3947-1-git-send-email-sergiodj@redhat.com> References: <1372664545-3947-1-git-send-email-sergiodj@redhat.com> X-SW-Source: 2013-07/txt/msg00001.txt.bz2 This patch implements the support for the Alpha architecture. Since this arch has some differences from x86, it basically defines an enum with those different signals, which is later used by alpha_linux_gdb_signal_to_target to return the proper signal number. The common signals between x86 and Alpha are treated on the generic linux_gdb_signal_to_target. 2013-07-01 Sergio Durigan Junior * alpha-linux-tdep.c: Define new enum with signals different from x86. (alpha_linux_gdb_signal_to_target): New function. (alpha_linux_init_abi): Set gdbarch_gdb_signal_to_target as alpha_linux_gdb_signal_to_target. --- gdb/alpha-linux-tdep.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/gdb/alpha-linux-tdep.c b/gdb/alpha-linux-tdep.c index 9efc5bd..1f36218 100644 --- a/gdb/alpha-linux-tdep.c +++ b/gdb/alpha-linux-tdep.c @@ -28,6 +28,35 @@ #include "linux-tdep.h" #include "alpha-tdep.h" +/* This enum represents the signals' numbers on the Alpha + architecture. It just contains the signal definitions which are + different from x86. + + It is derived from the file , + from the Linux kernel tree. */ + +enum + { + /* SIGABRT is the same as in x86, but is defined here because + SIGIOT depends on it. */ + ALPHA_LINUX_SIGABRT = 6, + ALPHA_LINUX_SIGEMT = 7, + ALPHA_LINUX_SIGBUS = 10, + ALPHA_LINUX_SIGSYS = 12, + ALPHA_LINUX_SIGURG = 16, + ALPHA_LINUX_SIGSTOP = 17, + ALPHA_LINUX_SIGTSTP = 18, + ALPHA_LINUX_SIGCONT = 19, + ALPHA_LINUX_SIGCHLD = 20, + ALPHA_LINUX_SIGIO = 23, + ALPHA_LINUX_SIGINFO = 29, + ALPHA_LINUX_SIGUSR1 = 30, + ALPHA_LINUX_SIGUSR2 = 31, + ALPHA_LINUX_SIGPOLL = ALPHA_LINUX_SIGIO, + ALPHA_LINUX_SIGPWR = ALPHA_LINUX_SIGINFO, + ALPHA_LINUX_SIGIOT = ALPHA_LINUX_SIGABRT, + }; + /* Under GNU/Linux, signal handler invocations can be identified by the designated code sequence that is used to return from a signal handler. In particular, the return address of a signal handler @@ -205,6 +234,63 @@ alpha_linux_regset_from_core_section (struct gdbarch *gdbarch, return NULL; } +/* Implementation of `gdbarch_gdb_signal_to_target', as defined in + gdbarch.h. */ + +static int +alpha_linux_gdb_signal_to_target (struct gdbarch *gdbarch, + enum gdb_signal signal) +{ + switch (signal) + { + case GDB_SIGNAL_EMT: + return ALPHA_LINUX_SIGEMT; + + case GDB_SIGNAL_BUS: + return ALPHA_LINUX_SIGBUS; + + case GDB_SIGNAL_SYS: + return ALPHA_LINUX_SIGSYS; + + case GDB_SIGNAL_URG: + return ALPHA_LINUX_SIGURG; + + case GDB_SIGNAL_STOP: + return ALPHA_LINUX_SIGSTOP; + + case GDB_SIGNAL_TSTP: + return ALPHA_LINUX_SIGTSTP; + + case GDB_SIGNAL_CONT: + return ALPHA_LINUX_SIGCONT; + + case GDB_SIGNAL_CHLD: + return ALPHA_LINUX_SIGCHLD; + + case GDB_SIGNAL_IO: + return ALPHA_LINUX_SIGIO; + + case GDB_SIGNAL_INFO: + return ALPHA_LINUX_SIGINFO; + + case GDB_SIGNAL_USR1: + return ALPHA_LINUX_SIGUSR1; + + case GDB_SIGNAL_USR2: + return ALPHA_LINUX_SIGUSR2; + + case GDB_SIGNAL_POLL: + return ALPHA_LINUX_SIGPOLL; + + case GDB_SIGNAL_PWR: + return ALPHA_LINUX_SIGPWR; + } + + /* We covered the different signals, the remaining ones are equal + for x86. */ + return linux_gdb_signal_to_target (gdbarch, signal); +} + static void alpha_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -236,6 +322,9 @@ alpha_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) set_gdbarch_regset_from_core_section (gdbarch, alpha_linux_regset_from_core_section); + + set_gdbarch_gdb_signal_to_target (gdbarch, + alpha_linux_gdb_signal_to_target); } /* Provide a prototype to silence -Wmissing-prototypes. */ -- 1.7.11.7