|
From: Matt Z. <md...@de...> - 2003-12-30 18:43:39
|
On Sun, Dec 28, 2003 at 03:30:42AM -0800, Matt Zimmerman wrote: > On Sun, Dec 28, 2003 at 02:12:40AM -0800, Matt Zimmerman wrote: > > > So, the sequence of events in handle_trap is this: > > > > 1. UPT_SYSCALL_NR(regs) == 78 > > > > 2. ptrace(PTRACE_POKEUSER,...) > > > > 3. UPT_SYSCALL_NR(regs) == 78 (still OK) > > > > 4. ptrace(PTRACE_SYSCALL,...) > > > > 5. UPT_SYSCALL_NR(regs) == 78 (still OK) > > > > 6. waitpid(pid,...) > > > > 7. UPT_SYSCALL_NR(regs) == 0 (boom) > > > > I have no idea why. > > I added some code to dump the regs struct before and after waitpid, and it > turns out that in fact, the syscall element is the only one which is > different; the rest of the structure is untouched. Corruption seems > unlikely, and the waitpid call certainly shouldn't be touching this...could > another thread be clobbering it somehow? It turns out that this problem seems to be due to compiler incompatibility. UML had been built with gcc 2.95 due to old breakage, and when built with gcc 3.3 (as glibc is), everything starts working again. My suspicion is that this is due to certain recent changes in pthreads. -- - mdz |