This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [reverse/record] adjust_pc_after_break in reverse execution mode?


OK, I'm with you now. Thanks a lot for clarifying. ;-)

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 <msnyder@vmware.com>

         * 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=<value optimized out>, argv=<value optimized out>)
    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=<value optimized out>, argv=<value optimized out>)
    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 <main+31>
(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=<value optimized out>, argv=<value optimized out>)
    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=<value optimized out>, argv=<value optimized out>)
    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 <main+30>
(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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]