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
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
* 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