Some ideas of displaced step function

Michael Snyder
Fri Oct 3 00:33:00 GMT 2008

teawater wrote:
> Hi all,
> I read the source code of displaced step and found some fail with it
> (
> I have some ideas on it:
> 1. I think this function just for asynchronous debug. But in acutally,
> it be used for any inferior:
> /* Return non-zero if displaced stepping is enabled, and can be used
>    with GDBARCH.  */
> static int
> use_displaced_stepping (struct gdbarch *gdbarch)
> {
>   return (can_use_displaced_stepping
>           && gdbarch_displaced_step_copy_insn_p (gdbarch));
> }
> Why not let it just work with asynchronous debug?
> 2. This function will affect another code cause it change pc change
> memory, but it not supply a get and set interfaces? Most of its
> variables are set to static. Just have a can_use_displaced_stepping
> can control it disable or enable, but user can set it too. If other
> code want know the orig PC or another things, How should they do?
> 3.  If get memory fail, it will just output a memory fail directly.
> Simple user will not know what happen. But in actually, he can use
> "maintenance set can-use-displaced-stepping 0" to jump off this
> problem directly.

Yes, in fact I have run into this myself.  In replay debugging
(for instance both Teawater's and VMware's implementation), you
can't write to an arbitrary memory location when you're
debugging a replay log.  Actually it's true with gdb-freeplay
too.  So I always have to remember to do

    maint set can-use-displaced-step off

before I begin.

Why are we using displaced-stepping when we're not async?
Isn't it unnecessarily expensive?

> So I think maybe can add some clear fail message for example:
> Displaced step write memory fail in address 0x....., Maybe you can
> jump off with close displaced step function in "maintenance set
> can-use-displaced-stepping 0".
> Thanks,
> Hui

More information about the Gdb mailing list