Messages in this thread | | | Date | Sun, 21 Nov 2004 14:33:32 -0800 (PST) | From | Linus Torvalds <> | Subject | Re: ptrace single-stepping change breaks Wine |
| |
On Sun, 21 Nov 2004, Davide Libenzi wrote: > > I'd agree with Linus here. A signal handler is part of the application, so > it should be single stepped in the same way other application code does. > My original patch simply reenabled the flag before returning to userspace, > and this had the consequence to single step into signal handlers too.
Hmmm.. I think I may have a test-case for the problem.
Lookie here:
#include <signal.h> #include <sys/mman.h>
void function(void) { printf("Copy protected: ok\n"); }
void handler(int signo) { extern char smc; smc++; }
#define TF 0x100
int main(int argc, char **argv) { void (*fnp)(void);
signal(SIGTRAP, handler); mprotect((void *)(0xfffff000 & (unsigned long)main), 4096, PROT_READ | PROT_WRITE); asm volatile("pushfl ; orl %0,(%%esp) ; popfl" : :"i" (TF):"memory"); asm volatile("pushfl ; andl %0,(%%esp) ; popfl" : :"i" (~TF):"memory"); asm volatile("\nsmc:\n\t" ".byte 0xb7\n\t" ".long function" :"=d" (fnp)); fnp(); exit(1); }
Compile it, run it, and it should say
Copy protected: ok
Now, try to "strace" it, or debug it with gdb, and see if you can repeat the behaviour.
Roland? Think of it as a challenge,
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/
| |