On Mon, Jun 30, 2008 at 03:25:58PM +0200, Jan Kratochvil wrote: [...] > this testcase hangs on ia64: > > $ echo 'int main () { return vfork (); }' >vfork.c; gcc -o vfork vfork.c; > strace -f ./vfork > execve("./vfork", ["./vfork"], [/* 41 vars */]) = 1 > ... > clone(Process 2929 attached (waiting for parent)
Aside: the sys_clone parser is poor, it does not show all available syscall parameters when entering syscall. > Fix tested on RHEL-5 kernel-2.6.18-94.el5.ia64. Older kernels (such as > kernel-2.6.18-53.el5.ia64) do not hang as they have a bug causing strace not > tracing the children (as strace is unable to force CLONE_PTRACE there). > Sorry for no ia64 vanilla kernels testing. I still do not fully understand why strace may hang in this case. > @@ -1524,12 +1527,17 @@ struct tcb *tcp; > #ifdef SYS_clone2 > case SYS_clone2: > #endif > - if ((tcp->u_arg[arg0_index] & CLONE_PTRACE) == 0 > - && (arg_setup (tcp, &state) < 0 > - || set_arg0 (tcp, &state, > - tcp->u_arg[arg0_index] | CLONE_PTRACE) < 0 > - || arg_finish_change (tcp, &state) < 0)) > - return -1; > + /* ia64 calls directly `clone (CLONE_VFORK)' contrary to x86 > + SYS_vfork above. Even on x86 we turn the VFORK semantics > + into plain FORK - each application must not depend on the > + VFORK specifics according to POSIX. We would hang waiting > + for the parent resume otherwise. */ > + if ((arg_setup (tcp, &state) < 0 > + || set_arg0 (tcp, &state, > + (tcp->u_arg[arg0_index] | CLONE_PTRACE) > + & ~CLONE_VFORK) < 0 > + || arg_finish_change (tcp, &state) < 0)) > + return -1; We already change vfork() to fork() in followvfork mode, so changing clone() this way is probably acceptable here, too. I'm not sure, though. -- ldv
pgpVrOZFt760P.pgp
Description: PGP signature
------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php
_______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel