me at kylehuey.com
Mon Jan 26 02:31:50 PST 2015
On Mon, Jan 26, 2015 at 2:33 PM, Kyle Huey <me at kylehuey.com> wrote:
> On Mon, Jan 26, 2015 at 2:19 PM, Robert O'Callahan <robert at ocallahan.org>
>> On Fri, Jan 23, 2015 at 6:03 PM, Kyle Huey <me at kylehuey.com> wrote:
>>> Why is this necessary?
>> When we resume with a PTRACE_SYSEMU (or PTRACE_SYSEMU_SINGLESTEP) on x86,
>> and we reach a system call, we get a ptrace trap. We need to exit the
>> emulated system call before we set the registers from the trace. We do that
>> by single-stepping in finish_emulated_syscall, but as the comments there
>> describe, it's not trivial since on x86 singlestepping not only exits the
>> syscall but also executes the instruction after it.
> Why do we need to exit the syscall before setting the registers? Does the
> kernel do something weird here?
The answer seems to be yes. On x86 early returning from
finish_emulated_syscall blows up replaying even trivial programs like
/bin/true, while on my ARM branch it appears to work just fine. I'll have
to poke at it harder.
Thanks for the explanation.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the rr-dev