On Fri, Nov 19, 2004 at 09:41:44PM +0100, Eric Pouech wrote:
Btw, does wine ever _use_ PTRACE_SINGLESTEP for any of the things it does?
If it does, then that woulc certainly explain why my "fix" made no difference: my fix _only_ handles the case where the ptracer never actually asks for single-stepping, and single-stepping was started entirely by the program being run (ie by setting TF in eflags from within the program itself).
But if wine ends up using PTRACE_SINGESTEP because wine actually wants to single-step over some instructions, then the kernel will set the PT_DTRACE bit, and start tracing through signal handlers too. The way Wine doesn't want..
wine mixes both approches, we have (to control what's generated inside the various exception) to ptrace from our NT-kernel-like process (the ptracer) to get the context of the exception. Restart from the ptracer is done with PTRACE_SINGLESTEP.
I'm getting the feeling that the question of whether to step into signal handlers is orthogonal to single-stepping; maybe it should be a separate ptrace operation.
Platforms which don't implement PTRACE_SINGLESTEP would probably appreciate this. A "single step" which stops you after setting up the signal trampoline and adjusting the PC, before executing any instructions in the handler.