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

Attachment: 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

Reply via email to