From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1446 invoked by alias); 31 Oct 2008 02:13:13 -0000 Received: (qmail 999 invoked by uid 22791); 31 Oct 2008 02:13:11 -0000 X-Spam-Check-By: sourceware.org Received: from ti-out-0910.google.com (HELO ti-out-0910.google.com) (209.85.142.184) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 31 Oct 2008 02:11:06 +0000 Received: by ti-out-0910.google.com with SMTP id d10so443458tib.12 for ; Thu, 30 Oct 2008 19:10:58 -0700 (PDT) Received: by 10.110.53.14 with SMTP id b14mr7781078tia.45.1225419058485; Thu, 30 Oct 2008 19:10:58 -0700 (PDT) Received: by 10.110.42.9 with HTTP; Thu, 30 Oct 2008 19:10:58 -0700 (PDT) Message-ID: Date: Fri, 31 Oct 2008 13:04:00 -0000 From: teawater To: "Pedro Alves" , "Michael Snyder" Subject: Re: [reverse/record] adjust_pc_after_break in reverse execution mode? Cc: "gdb-patches@sourceware.org" In-Reply-To: <200810301615.40510.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <200810180210.16346.pedro@codesourcery.com> <200810301107.23536.pedro@codesourcery.com> <29E9E827072C404C88A05DDC42B4599717BBECC4E1@PA-EXMBX14.vmware.com> <200810301615.40510.pedro@codesourcery.com> X-IsSubscribed: yes 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 X-SW-Source: 2008-10/txt/msg00718.txt.bz2 I think the reason is P record let inferior step recycle in the linux-nat target. So when it break by breakpint, it will not let (pc+gdbarch_decr_pc_after_break (gdbarch)). Then after adjust_pc_after_break, The PC is error. So I post patch to fix it. http://sourceware.org/ml/gdb-patches/2008-10/msg00634.html And I try it in Pedro's test is OK. After that, Pedro said maybe we can add a target_ops level interface tell infrun.c that this PC don't need adjust_pc_after_break. This target can do it with itself. So, what shell we do now? :) Check my patch in or post a patch for this interface first? This is just my understand of current stat. Maybe some part is wrong. On Fri, Oct 31, 2008 at 00:15, Pedro Alves wrote: > On Thursday 30 October 2008 15:54:34, Michael Snyder wrote: >> Pedro, yes, but I can no longer get it to exhibit that behavior. >> Can you? >> > > Sure, see below. > > Head of ChangeLog: > > 2008-10-24 Michael Snyder > > * infrun.c (handle_inferior_event): Handle dynamic symbol > resolution in reverse. > > Test app: > > 18 volatile int global_foo = 0; > 19 > 20 int > 21 main (int argc, char **argv) > 22 { > 23 asm ("nop"); /* 1st insn */ > 24 asm ("nop"); /* 2nd insn */ > 25 asm ("nop"); /* 3rd insn */ > 26 asm ("nop"); /* 4th insn */ > 27 if (!global_foo) > 28 goto ahead; > 29 asm ("nop"); /* 5th insn */ > 30 asm ("nop"); /* 6th insn */ > 31 asm ("nop"); /* 7th insn */ > 32 asm ("nop"); /* 8th insn */ <<<<< bkpt here > 33 ahead: > 34 asm ("nop"); /* 9th insn */ <<<<< and here > 35 end: > 36 return 0; > 37 } > > Normal play: > >>./gdb ./testsuite/gdb.base/decr-pc-rev > GNU gdb (GDB) 6.8.50.20080930-cvs > [...] > (gdb) start > Temporary breakpoint 1 at 0x8048382: file ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c, line 23. > Starting program: /home/pedro/gdb/reverse-20080930-branch/build32/gdb/testsuite/gdb.base/decr-pc-rev > > Temporary breakpoint 1, main (argc=, argv=) > at ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c:23 > 23 asm ("nop"); /* 1st insn */ > (gdb) b 32 > Breakpoint 2 at 0x8048392: file ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c, line 32. > (gdb) b 34 > Breakpoint 3 at 0x8048393: file ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c, line 34. > (gdb) c > Continuing. > > Breakpoint 3, main (argc=, argv=) > at ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c:34 > 34 in ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c > (gdb) p $pc > $1 = (void (*)()) 0x8048393 > (gdb) > > Ok, breakpoint 3 was hit (notice the goto at line 28, it's > always executed because global_foo is always 0) > > -------- > > Now the same, but while recording (replay exhibits the > same symptom) > >>./gdb ./testsuite/gdb.base/decr-pc-rev > GNU gdb (GDB) 6.8.50.20080930-cvs > [...] > (gdb) start > Temporary breakpoint 1 at 0x8048382: file ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c, line 23. > Starting program: /home/pedro/gdb/reverse-20080930-branch/build32/gdb/testsuite/gdb.base/decr-pc-rev > > Temporary breakpoint 1, main (argc=, argv=) > at ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c:23 > 23 asm ("nop"); /* 1st insn */ > (gdb) record > ^^^^^^ > (gdb) c > Continuing. > > Breakpoint 2, main (argc=, argv=) > at ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c:32 > 32 in ../../../src/gdb/testsuite/gdb.base/decr-pc-rev.c > (gdb) p $pc > $1 = (void (*)()) 0x8048392 > (gdb) > > Breakpoint 3 should've been hit, not 2. The PC points at > 0x8048392, but it should point at 0x8048393. > > Feels like we're going in circles. :-) > > -- > Pedro Alves >