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

Pedro Alves
2008-10-21T00:21:33Z

On Tuesday 21 October 2008 00:36:12, teawater wrote:
> I think your mean is check breakpoint in address
> read_pc()+gdbarch_decr_pc_after_break (gdbarch) in record_wait, right?

Taking x86 as an example, when you're doing normal debugging and you
hit a breakpoint (SIGTRAP), the first read_pc GDB does to check where
what breakpoint was hit, will read back `breakpoint_PC + 1' --- GDB takes care
getting rid of that `+ 1' offset in infrun.c:adjust_pc_after_break. The
idea is for you to do the same as the kernel/hardware would --- still
check for breakpoints at read_pc, but increment PC by 1 before reporting the
breakpoint to GDB's core. E.g., see the `pc += gdbarch...' line from
the patch I posted previously, something like:

record.c:record_wait ()
{
...
+ /* Check for breakpoint hits in forward execution. */
+ pc = read_pc ();
+ if (execution_direction == EXEC_FORWARD
+ && regular_breakpoint_inserted_here_p (pc)
+ /* && !single-stepping */)
+ {
+ status->kind = TARGET_WAITKIND_STOPPED;
+ status->value.sig = TARGET_SIGNAL_TRAP;
+ if (software_breakpoint_inserted_here_p (pc))
+ {
+ pc += gdbarch_decr_pc_after_break (gdbarch);
+ write_pc (pc);
+ }
+

--
Pedro Alves