lkml.org 
[lkml]   [2005]   [Jan]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: ptrace single-stepping change breaks Wine


On Sat, 1 Jan 2005, Davide Libenzi wrote:
>
> I used the test program below on 2.4.27, 2.6.8.1 and latest BK + TF-careful.
> In all cases single stepping over POPF succeeded.

I don't think you realize what the failure case for popf was.

It wasn't that we couldn't single-step it: it was that we corrupted the
resulting elfags value after single-stepping it.

Try to extend your program to print out not only the EIP after the
single-step, but also the value of EFLAGS, and you'll see what I mean.
Earlier kernels are _really_ bad at it: they'll always report that TF is
set. The "TF-careful" patch gets TF right for normal instructions, and the
"TF-popf" patch gets TF right after popf too.

The one remaining case I know of where we still get TF wrong is "pushf",
where single-stepping a pushf will not corrupt TF, but it will save the
wrong value on the stack (which obviously may corrupt TF _later_, when the
paired "popf" happens).

It's sad that x86 put the single-stepping into a user-visible register.
All the other debug state is kernel-only, meaning that we don't have to
play any games with them... It would have been nice if Intel had added a
"single-step" bit to %db7, and then just or'ed in the values of TF and the
new flag when deciding to single-step. That would have allowed the legacy
stuff to work, and given debuggers a much less intrusive way to single-
step.

Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2009-11-18 23:46    [W:0.103 / U:0.152 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site