binutils-gdb/gdb/testsuite/gdb.btrace
Markus Metzger 485668e5b3 record: set stop_pc in "record goto" command
When navigating in the recorded execution trace via "record goto", we do not
set stop_pc.  This may trigger an internal error in infrun.c when stepping
from that location.  Set it.

(gdb) rec full
(gdb) c
Continuing.

Breakpoint 1, foo (void) at foo.c:42
42             x = y
(gdb) rn
foo (void)
    at foo.c:41
41             y = x
(gdb) rec go end
Go forward to insn number 98724
    at foo.c:42
42             x = y
(gdb) n
infrun.c:2382: internal-error: resume: Assertion `sig != GDB_SIGNAL_0' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n)

This happens because there's a breakpoint at PC when the "next"
is issued, so that breapoint should be immediately stepped over.
That should have been detected/done by proceed, here:

  if (addr == (CORE_ADDR) -1)
    {
      if (pc == stop_pc
	  && breakpoint_here_p (aspace, pc) == ordinary_breakpoint_here
	  && execution_direction != EXEC_REVERSE)
	/* There is a breakpoint at the address we will resume at,
	   step one instruction before inserting breakpoints so that
	   we do not stop right away (and report a second hit at this
	   breakpoint).

	   Note, we don't do this in reverse, because we won't
	   actually be executing the breakpoint insn anyway.
	   We'll be (un-)executing the previous instruction.  */
	tp->stepping_over_breakpoint = 1;

But since stop_pc was stale, the pc == stop_pc check failed, and left the
breakpont at PC inserted.

gdb/
	* record-btrace.c (record_btrace_goto_begin, record_btrace_goto_end)
	record_btrace_goto): Move call to print_stack_frame ...
	(record_btrace_set_replay): ... here.  Set stop_pc.
	* record-full.c (record_full_goto_entry): Set stop_pc.

testsuite/
	* gdb.btrace/record_goto-step.exp: New.
2015-07-10 09:19:27 +02:00
..
Makefile.in
buffer-size.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
data.c
data.exp
delta.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
enable.c
enable.exp
exception.cc
exception.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
function_call_history.c
function_call_history.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
gcore.exp
i686-record_goto.S
i686-tailcall.S
instruction_history.S
instruction_history.c
instruction_history.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
multi-thread-step.c
multi-thread-step.exp
nohist.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
record_goto-step.exp record: set stop_pc in "record goto" command 2015-07-10 09:19:27 +02:00
record_goto.c
record_goto.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
rn-dl-bind.c
rn-dl-bind.exp
segv.c
segv.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
step.exp
stepi.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
tailcall.c
tailcall.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
unknown_functions.c
unknown_functions.exp Share the "multi_line" helper among all testcases 2015-04-01 15:06:39 +02:00
vdso.c
vdso.exp
x86_64-record_goto.S
x86_64-tailcall.S