From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 39714 invoked by alias); 24 Feb 2016 23:37:58 -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 39698 invoked by uid 89); 24 Feb 2016 23:37:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=4.5, 1.9.3, 1618, cell X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 24 Feb 2016 23:37:57 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 3245F8C552 for ; Wed, 24 Feb 2016 23:37:56 +0000 (UTC) Received: from brno.lan (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u1ONbskr028707 for ; Wed, 24 Feb 2016 18:37:55 -0500 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH] MIPS/Linux: Also recognize TRAP_BRKPT and TRAP_HWBKPT Date: Wed, 24 Feb 2016 23:37:00 -0000 Message-Id: <1456357074-27363-1-git-send-email-palves@redhat.com> In-Reply-To: <56CE3AA6.6090005@redhat.com> References: <56CE3AA6.6090005@redhat.com> X-SW-Source: 2016-02/txt/msg00762.txt.bz2 Ref: https://sourceware.org/ml/gdb-patches/2016-02/msg00756.html This makes the MIPS Linux backends recognize TRAP_BRKPT and TRAP_HWBKPT in siginfo.si_code too, in addition to SI_KERNEL. This is in anticipation of a future kernel change. On kernels that reports SI_KERNEL, we'll enter the "ambiguous" path of save_stop_reason: if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code) && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) { /* The si_code is ambiguous on this arch -- check debug registers. */ if (!check_stopped_by_watchpoint (lp)) lp->stop_reason = TARGET_STOPPED_BY_SW_BREAKPOINT; } while on kernels that report the finer-grained si_code values, we'll enter the corresponding branches: else if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)) { } else if (GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code)) { ... gdb/ChangeLog: 2016-02-24 Pedro Alves * nat/linux-ptrace.h [__mips__] (GDB_ARCH_IS_TRAP_BRKPT): Also accept TRAP_BRKPT. [__mips__] (GDB_ARCH_IS_TRAP_HWBKPT): Also accept TRAP_HWBKPT. --- gdb/nat/linux-ptrace.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h index b9123c9..86b1f29 100644 --- a/gdb/nat/linux-ptrace.h +++ b/gdb/nat/linux-ptrace.h @@ -140,8 +140,8 @@ struct buffer; in SPU code on a Cell/B.E. However, SI_KERNEL is never seen on a SIGTRAP for any other reason. - The MIPS kernel uses SI_KERNEL for all kernel generated traps. - Since: + The MIPS kernel (up until 4.5 at least) uses SI_KERNEL for all + kernel generated traps. Since: - MIPS doesn't do hardware single-step. - We don't need to care about exec SIGTRAPs --- we assume @@ -152,6 +152,9 @@ struct buffer; software breakpoints and hardware watchpoints, which can be done by peeking the debug registers. + However, it is anticipated that later MIPS kernels will report + proper TRAP_BRKPT and TRAP_HWBKPT codes, so we also match them. + The generic Linux target code should use GDB_ARCH_IS_TRAP_* instead of TRAP_* to abstract out these peculiarities. */ #if defined __i386__ || defined __x86_64__ @@ -161,8 +164,8 @@ struct buffer; # define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL || (X) == TRAP_BRKPT) # define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == TRAP_HWBKPT) #elif defined __mips__ -# define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL) -# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == SI_KERNEL) +# define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL || (X) == TRAP_BRKPT) +# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == SI_KERNEL || (X) == TRAP_HWBKPT) #else # define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == TRAP_BRKPT) # define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == TRAP_HWBKPT) -- 1.9.3