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.
(BTW: I also CC:ed wine-devel ML, that might be of interest to them too)
A+