Hello community, here is the log from the commit of package strace checked in at Mon Jun 30 19:36:50 CEST 2008. -------- --- strace/strace.changes 2008-04-10 13:00:40.000000000 +0200 +++ strace/strace.changes 2008-06-30 18:45:05.000000000 +0200 @@ -1,0 +2,5 @@ +Mon Jun 30 18:44:58 CEST 2008 - schwab@suse.de + +- Fix following vfork and clone2. + +------------------------------------------------------------------- New: ---- clone2.diff vfork.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ strace.spec ++++++ --- /var/tmp/diff_new_pack.n18336/_old 2008-06-30 19:34:56.000000000 +0200 +++ /var/tmp/diff_new_pack.n18336/_new 2008-06-30 19:34:56.000000000 +0200 @@ -17,7 +17,7 @@ Group: Development/Tools/Debuggers AutoReqProv: on Version: 4.5.16 -Release: 44 +Release: 56 Summary: A utility to trace the system calls of a program Source: strace-%{version}.tar.bz2 Patch: strace-%{version}.diff @@ -27,6 +27,8 @@ Patch5: strace-graph.diff Patch6: ioctl.diff Patch8: ptrace.diff +Patch9: vfork.diff +Patch10: clone2.diff Url: http://sourceforge.net/projects/strace/ BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -52,6 +54,8 @@ %patch5 %patch6 %patch8 +%patch9 +%patch10 %build export CFLAGS="$RPM_OPT_FLAGS" @@ -75,6 +79,8 @@ %doc %{_mandir}/man1/strace.1.gz %changelog +* Mon Jun 30 2008 schwab@suse.de +- Fix following vfork and clone2. * Thu Apr 10 2008 ro@suse.de - added baselibs.conf file to build xxbit packages for multilib support ++++++ clone2.diff ++++++ 2008-06-30 Jan Kratochvil <jan.kratochvil@redhat.com> Fix ia64 `-f' on CLONE2 formerly crashing the child. * util.c [IA64] (restore_arg0, restore_arg1): Define as empty. --- util.c 20 May 2008 00:34:34 -0000 1.75 +++ util.c 30 Jun 2008 16:23:00 -0000 @@ -1379,6 +1379,12 @@ set_arg1 (struct tcb *tcp, arg_setup_sta return errno ? -1 : 0; } +/* ia64 does not return the input arguments from functions (and syscalls) + according to ia64 RSE (Register Stack Engine) behavior. */ + +# define restore_arg0(tcp, state, val) ((void) (state), 0) +# define restore_arg1(tcp, state, val) ((void) (state), 0) + #elif defined (SPARC) || defined (SPARC64) typedef struct regs arg_setup_state; ++++++ vfork.diff ++++++ 2008-06-27 Jan Kratochvil <jan.kratochvil@redhat.com> * util.c (CLONE_VFORK): Define if not defined already. (setbpt): Clear CLONE_VFORK for SYS_CLONE and SYS_CLONE2. New comment. Originally found by Vitaly Mayatskikh. --- util.c 20 May 2008 00:34:34 -0000 1.75 +++ util.c 30 Jun 2008 12:53:31 -0000 @@ -1281,6 +1281,9 @@ struct tcb *tcp; #ifndef CLONE_PTRACE # define CLONE_PTRACE 0x00002000 #endif +#ifndef CLONE_VFORK +# define CLONE_VFORK 0x00004000 +#endif #ifndef CLONE_STOPPED # define CLONE_STOPPED 0x02000000 #endif @@ -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; tcp->flags |= TCB_BPTSET; tcp->inst[0] = tcp->u_arg[arg0_index]; tcp->inst[1] = tcp->u_arg[arg1_index]; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@Hilbert.suse.de