ptrace single-stepping change breaks Wine

Linus Torvalds torvalds at osdl.org
Wed Dec 29 14:04:57 CST 2004


On Wed, 29 Dec 2004, Jesse Allen wrote:
> 
> > 
> > So does removing the conditional TF clear make everything work again?
> > 
> 
> Yes, as long as TIF_SINGLESTEP is not set in set_singlestep(). 

That may be a clue, if only because that makes absolutely _zero_ sense. 

Setting TIF_SINGLESTEP shouldn't actually matter in this case, since we
set the TRAP_FLAG in eflags by hand anyway (and that's what TIF_SINGESTEP
will just re-do when returning to user space).

What TIF_SINGLESTEP _does_ do, however, is change how some other issues
are reported to user space. In particular, it causes system call tracing
(see arch/i386/kernel/ptrace.c: do_syscall_trace), and maybe it is _that_ 
that messes up Wine.

So instead of removing the setting of TIF_SINGLESTEP in set_singlestep(), 
can you test whether removing the _testing_ of it in do_syscall_trace() 
makes things happier for you? Hmm?

(Also, looking at the code, I get the feeling that set_singlestep() should 
_only_ set TIF_SINGLESTEP, and not set the TRAP_FLAG by hand at all, since 
TIF_SINGESTEP should take care of that detail regardless).

		Linus



More information about the wine-devel mailing list