From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15704 invoked by alias); 16 Mar 2009 18:50:55 -0000 Received: (qmail 15687 invoked by uid 22791); 16 Mar 2009 18:50:53 -0000 X-SWARE-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 16 Mar 2009 18:50:45 +0000 Received: from brahms.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by brahms.sibelius.xs4all.nl (8.14.3/8.14.3) with ESMTP id n2GIoZUu005994; Mon, 16 Mar 2009 19:50:35 +0100 (CET) Received: (from kettenis@localhost) by brahms.sibelius.xs4all.nl (8.14.3/8.14.3/Submit) id n2GIoZgc021072; Mon, 16 Mar 2009 19:50:35 +0100 (CET) Date: Mon, 16 Mar 2009 18:50:00 -0000 Message-Id: <200903161850.n2GIoZgc021072@brahms.sibelius.xs4all.nl> From: Mark Kettenis To: aristovski@qnx.com CC: gdb@sources.redhat.com In-reply-to: (message from Aleksandar Ristovski on Mon, 16 Mar 2009 13:40:49 -0400) Subject: Re: [RFC] stepping over permanent breakpoint References: Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2009-03/txt/msg00089.txt.bz2 > From: Aleksandar Ristovski > Date: Mon, 16 Mar 2009 13:40:49 -0400 > > Hello, > > When there is a hard-coded breakpoint in code, like in this > example (for x86): > > #include > > int main() > { > __asm(" int $0x03\n"); > printf("Hello World\n"); > return 0; > } > > gdb on linux will appear to work correctly. Well, on Linux, that instruction will not be interpreted as a permanent breakpoint, just like on QNX. > However, on systems that do not need pc adjustment after > break (like QNX) gdb will not be able to step over that > breakpoint unless user explicitly sets a breakpoint on top > of it. The big question here is whether a breakpoint trap instruction should always be interpreted as a permanent breakpoint in GDB or that it only gets interpreted as such if you actually tell GDB about it. Up until now, we've always done the latter. If you don't tell GDB, random breakpoint trap instructions are handled as normal instructions and you get to see whatever the architecture/OS does for these instructions. > I think that in case of linux it is actually working by > accident - because kernel does not back-up instruction > pointer after hard-coded breakpoint instruction was > executed. Gdb will receive SIGTRAP but will not really know why. > > Attached patch fixes this for systems where > gdbarch_decr_pc_after_break (gdbarch) == 0 If you want to fix things, it should be fixed for *all* systems.