Re: i386 int3 handling, running vs stepping

Doug Evans
2009-02-02T00:52:23Z

On Sun, Feb 1, 2009 at 3:32 PM, Daniel Jacobowitz <drow@false.org> wrote:
> On Sun, Feb 01, 2009 at 03:18:19PM -0800, Doug Evans wrote:
>> Program received signal SIGTRAP, Trace/breakpoint trap.
>> main () at int3.S:6
>> 6 nop
>>
>> Note that $pc is the insn AFTER the int3.
>> Question: Is this a bug? Should $pc point to the int3 instead?
>> [whether that's achieved with decr_pc_after_break or whatever
>> is a separate question]
>> I can argue either case, I don't have a preference per se.
>
> I think it's right the way it is, and I know people take advantage of
> this for hardwired breakpoints.
>

btw, i386-tdep.c:i386_displaced_step_fixup has this:

/* If we have stepped over a breakpoint, set the %eip to
point at the breakpoint instruction itself.

(gdbarch_decr_pc_after_break was never something the core
of GDB should have been concerned with; arch-specific
code should be making PC values consistent before
presenting them to GDB.) */
if (i386_breakpoint_p (insn))
{
if (debug_displaced)
fprintf_unfiltered (gdb_stdlog,
"displaced: stepped breakpoint\n");
eip--;
}

Given that the pc should be left AFTER the int3 when stepping over it,
do we want to delete this code?