From patchwork Tue Dec 8 14:07:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Tremblay X-Patchwork-Id: 9934 Received: (qmail 38751 invoked by alias); 8 Dec 2015 14:07:40 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 38626 invoked by uid 89); 8 Dec 2015 14:07:39 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.6 required=5.0 tests=AWL, BAYES_00, SPF_PASS autolearn=ham version=3.3.2 X-HELO: usplmg21.ericsson.net Received: from usplmg21.ericsson.net (HELO usplmg21.ericsson.net) (198.24.6.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-SHA encrypted) ESMTPS; Tue, 08 Dec 2015 14:07:34 +0000 Received: from EUSAAHC001.ericsson.se (Unknown_Domain [147.117.188.75]) by usplmg21.ericsson.net (Symantec Mail Security) with SMTP id D0.48.32102.D14E6665; Tue, 8 Dec 2015 15:07:26 +0100 (CET) Received: from elxa4wqvvz1.dyn.mo.ca.am.ericsson.se (147.117.188.8) by smtps-am.internal.ericsson.com (147.117.188.75) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 8 Dec 2015 09:07:29 -0500 From: Antoine Tremblay To: CC: Antoine Tremblay Subject: [PATCH v7 3/8] Use xml-syscall to compare syscall numbers in arm_linux_sigreturn_return-addr. Date: Tue, 8 Dec 2015 09:07:16 -0500 Message-ID: <1449583641-18156-4-git-send-email-antoine.tremblay@ericsson.com> In-Reply-To: <1449583641-18156-1-git-send-email-antoine.tremblay@ericsson.com> References: <1449583641-18156-1-git-send-email-antoine.tremblay@ericsson.com> MIME-Version: 1.0 X-IsSubscribed: yes This patch changes checks for sigreturn and rt_sigreturn syscalls in arm-linux-tdep.c from magic numbers to numbers computed from syscall/arm-linux.xml. It also adds a new function to xml-syscall.h/c to compare syscalls numbers called is_syscall. No regressions, tested on ubuntu 14.04 ARMv7 and x86. With gdbserver-{native,extended} / { -marm -mthumb } gdb/ChangeLog: * arm-linux-tdep.c (arm_linux_sigreturn_return_addr): Use is_syscall. * xml-syscall.c (is_syscall): New function. * xml-syscall.h (is_syscall): New declaration. --- gdb/arm-linux-tdep.c | 5 ++++- gdb/xml-syscall.c | 13 +++++++++++++ gdb/xml-syscall.h | 6 ++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index 73e1271..acb5701 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -788,8 +788,11 @@ arm_linux_sigreturn_return_addr (struct frame_info *frame, unsigned long svc_number, CORE_ADDR *pc, int *is_thumb) { + struct gdbarch *gdbarch = get_frame_arch (frame); + /* Is this a sigreturn or rt_sigreturn syscall? */ - if (svc_number == 119 || svc_number == 173) + if (is_syscall (gdbarch, "sigreturn", svc_number) + || is_syscall (gdbarch, "rt_sigreturn", svc_number)) { if (get_frame_type (frame) == SIGTRAMP_FRAME) { diff --git a/gdb/xml-syscall.c b/gdb/xml-syscall.c index 31a80a5..e6a6a2a 100644 --- a/gdb/xml-syscall.c +++ b/gdb/xml-syscall.c @@ -422,4 +422,17 @@ get_syscall_names (struct gdbarch *gdbarch) return xml_list_of_syscalls (gdbarch); } +int +is_syscall (struct gdbarch *gdbarch, const char *syscall_name, + int syscall_number) +{ + struct syscall s; + get_syscall_by_name (gdbarch, syscall_name, &s); + + if (s.number == syscall_number) + return 1; + else + return 0; +} + #endif /* ! HAVE_LIBEXPAT */ diff --git a/gdb/xml-syscall.h b/gdb/xml-syscall.h index 55c9696..e232edc 100644 --- a/gdb/xml-syscall.h +++ b/gdb/xml-syscall.h @@ -50,4 +50,10 @@ void get_syscall_by_name (struct gdbarch *gdbarch, const char **get_syscall_names (struct gdbarch *gdbarch); +/* Compare the syscall number with the syscall name given in argument. If + they match return 1 otherwise return 0. */ + +int is_syscall (struct gdbarch *gdbarch, const char *syscall_name, + int syscall_number); + #endif /* XML_SYSCALL_H */