|
From: Jeff D. <jd...@ad...> - 2004-08-03 18:33:39
|
db...@en... said: > ugh, so close - it bails - stopped by clone() !?!!?? : OK, there were a bunch of problems that were fixed when me, Jeremy, and Julian were working on this. The clone one seems to have not made it. I've lost the patches I had, but I dug this out of a piece of email. It applies to coregrind/vg_syscalls.c: > @@ -39,6 +40,10 @@ > # code which copies from baseBlock before the call, into > # m_state_static, and back afterwards. > > +.section .data > +save_ip: > + .long 0 > + > VG_(do_syscall): > # Save all the int registers of the real machines state on the > # simulators stack. > @@ -80,10 +85,27 @@ > movl VG_(m_state_static)+48, %esi > movl VG_(m_state_static)+52, %edi > > + cmpl $__NR_clone, %eax > + jne not_clone > + > + pushl %eax > + movl VG_(m_state_static)+60, %eax > + movl %eax, save_ip > + popl %eax > + > + int $0x80 > + > + cmpl $0, %eax > + jne parent_finish > + > + jmp *save_ip > + > +not_clone: > # esp now refers to the simulatees stack > # Do the actual system call > int $0x80 It handles the clone by calling clone itself, creating a new valgrind thread which will go on grinding the new UML thread. Also, I saw this: > valgrind: the `impossible' happened: > Unhandled REPE case If you see this, check that you have http://www.goop.org/~jeremy/valgrind/76-repe-scas.patch and apply if not. Jeff |