From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 66121 invoked by alias); 24 Feb 2016 12:55:22 -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 66111 invoked by uid 89); 24 Feb 2016 12:55:22 -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=accurately, cell, Cell, watchpoint 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 12:55:21 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id CCBD490E42; Wed, 24 Feb 2016 12:55:19 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u1OCtHDw016058; Wed, 24 Feb 2016 07:55:18 -0500 Message-ID: <56CDA835.7030903@redhat.com> Date: Wed, 24 Feb 2016 12:55:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Luis Machado , gdb-patches@sourceware.org CC: macro@linux-mips.org Subject: Re: [PATCH, v3] Expect SI_KERNEL or TRAP_BRKPT si_code values for MIPS breakpoint traps References: <1456179628-14249-1-git-send-email-lgustavo@codesourcery.com> <56CB8E9D.70605@redhat.com> <56CBBD44.8020808@codesourcery.com> In-Reply-To: <56CBBD44.8020808@codesourcery.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2016-02/txt/msg00724.txt.bz2 On 02/23/2016 02:00 AM, Luis Machado wrote: > On 02/22/2016 07:41 PM, Pedro Alves wrote: >> On 02/22/2016 10:20 PM, Luis Machado wrote: >> >>> diff --git a/gdb/nat/linux-ptrace.h b/gdb/nat/linux-ptrace.h >>> index ba58717..72b32b1 100644 >>> --- a/gdb/nat/linux-ptrace.h >>> +++ b/gdb/nat/linux-ptrace.h >>> @@ -140,11 +140,16 @@ 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 the default si_code of SI_KERNEL for software >>> + breakpoints, hardware watchpoints and SIGTRAP's in general. >> >> If we get this for both software breakpoints and hardware watchpoints, >> then it seems to me that this change still leaves watchpoints broken, >> as I can't see how check_stopped_by_watchpoint is reached, in either >> gdb/linux-nat.c or gdbserver/linux-low.c. > > With or without this specific breakpoint fix, hardware watchpoints are > already broken for MIPS AFAICS. Yep, hence my "still". ;-) > > MIPS' kernel has never set si_code to anything other than SI_KERNEL. > When the change to expect TRAP_HWBKPT was committed, then hardware > watchpoints stopped working properly for MIPS. > > Now all hardware watchpoints produce are breakpoint-like traps that get > silently ignored by GDB as "delayed software breakpoint trap". Neither > GDB nor GDBserver can tell when a hardware watchpoint really happened by > using si_code information. > > But this seems to be a different issue and i think it should be handle > separately. I think it's all the same, and that we'll need to change linux-nat.c:save_sigtrap and the equivalent bits in gdbserver/linux-low.c. So if we pick the table I added for x86, and fill it in for MIPS, this is what we get: | what | si_code | |------------------------------------------+----------------| | software breakpoints | SI_KERNEL | | single-steps | N/A | | single-stepping a syscall | N/A | | user sent SIGTRAP | 0 | | exec SIGTRAP (when no PTRACE_EVENT_EXEC) | doesn't matter | | hardware breakpoints | N/A | | hardware watchpoints | SI_KERNEL | So the only distinction we need to make is between software breakpoints SI_KERNEL, and hardware watchpoints SI_KERNEL. And we can accurately do that with mips_linux_stopped_by_watchpoint / mips_stopped_by_watchpoint. Is my understanding correct? Thanks, Pedro Alves