diff --git a/valgrind-3.4.1-futex.patch b/valgrind-3.4.1-futex.patch new file mode 100644 index 0000000..4545750 --- /dev/null +++ b/valgrind-3.4.1-futex.patch @@ -0,0 +1,112 @@ +--- valgrind/include/vki/vki-linux.h.jj 2009-07-28 11:14:49.000000000 +0200 ++++ valgrind/include/vki/vki-linux.h 2009-07-28 11:37:12.000000000 +0200 +@@ -1150,7 +1150,7 @@ struct vki_seminfo { + #define VKI_MREMAP_FIXED 2 + + //---------------------------------------------------------------------- +-// From linux-2.6.10-rc3-mm1/include/linux/futex.h ++// From linux-2.6.31-rc4/include/linux/futex.h + //---------------------------------------------------------------------- + + #define VKI_FUTEX_WAIT (0) +@@ -1158,7 +1158,16 @@ struct vki_seminfo { + #define VKI_FUTEX_FD (2) + #define VKI_FUTEX_REQUEUE (3) + #define VKI_FUTEX_CMP_REQUEUE (4) ++#define VKI_FUTEX_WAKE_OP (5) ++#define VKI_FUTEX_LOCK_PI (6) ++#define VKI_FUTEX_UNLOCK_PI (7) ++#define VKI_FUTEX_TRYLOCK_PI (8) ++#define VKI_FUTEX_WAIT_BITSET (9) ++#define VKI_FUTEX_WAKE_BITSET (10) ++#define VKI_FUTEX_WAIT_REQUEUE_PI (11) ++#define VKI_FUTEX_CMP_REQUEUE_PI (12) + #define VKI_FUTEX_PRIVATE_FLAG (128) ++#define VKI_FUTEX_CLOCK_REALTIME (256) + + struct vki_robust_list { + struct vki_robust_list __user *next; +--- valgrind/coregrind/m_syswrap/syswrap-linux.c.jj 2009-07-28 11:14:50.000000000 +0200 ++++ valgrind/coregrind/m_syswrap/syswrap-linux.c 2009-07-28 12:00:09.000000000 +0200 +@@ -865,31 +865,43 @@ PRE(sys_futex) + ARG6 - int val3 CMP_REQUEUE + */ + PRINT("sys_futex ( %#lx, %ld, %ld, %#lx, %#lx )", ARG1,ARG2,ARG3,ARG4,ARG5); +- switch(ARG2) { ++ switch(ARG2 & ~(VKI_FUTEX_PRIVATE_FLAG|VKI_FUTEX_CLOCK_REALTIME)) { + case VKI_FUTEX_CMP_REQUEUE: +- case VKI_FUTEX_CMP_REQUEUE | VKI_FUTEX_PRIVATE_FLAG: ++ case VKI_FUTEX_WAKE_OP: ++ case VKI_FUTEX_CMP_REQUEUE_PI: + PRE_REG_READ6(long, "futex", + vki_u32 *, futex, int, op, int, val, + struct timespec *, utime, vki_u32 *, uaddr2, int, val3); + break; + case VKI_FUTEX_REQUEUE: +- case VKI_FUTEX_REQUEUE | VKI_FUTEX_PRIVATE_FLAG: ++ case VKI_FUTEX_WAIT_REQUEUE_PI: + PRE_REG_READ5(long, "futex", + vki_u32 *, futex, int, op, int, val, + struct timespec *, utime, vki_u32 *, uaddr2); + break; ++ case VKI_FUTEX_WAIT_BITSET: ++ PRE_REG_READ6(long, "futex", ++ vki_u32 *, futex, int, op, int, val, ++ struct timespec *, utime, int, dummy, int, val3); ++ break; ++ case VKI_FUTEX_WAKE_BITSET: ++ PRE_REG_READ6(long, "futex", ++ vki_u32 *, futex, int, op, int, val, ++ int, dummy, int, dummy2, int, val3); ++ break; + case VKI_FUTEX_WAIT: +- case VKI_FUTEX_WAIT | VKI_FUTEX_PRIVATE_FLAG: ++ case VKI_FUTEX_LOCK_PI: + PRE_REG_READ4(long, "futex", + vki_u32 *, futex, int, op, int, val, + struct timespec *, utime); + break; + case VKI_FUTEX_WAKE: +- case VKI_FUTEX_WAKE | VKI_FUTEX_PRIVATE_FLAG: + case VKI_FUTEX_FD: ++ case VKI_FUTEX_TRYLOCK_PI: + PRE_REG_READ3(long, "futex", + vki_u32 *, futex, int, op, int, val); + break; ++ case VKI_FUTEX_UNLOCK_PI: + default: + PRE_REG_READ2(long, "futex", vki_u32 *, futex, int, op); + break; +@@ -899,23 +911,27 @@ PRE(sys_futex) + + *flags |= SfMayBlock; + +- switch(ARG2) { ++ switch(ARG2 & ~(VKI_FUTEX_PRIVATE_FLAG|VKI_FUTEX_CLOCK_REALTIME)) { + case VKI_FUTEX_WAIT: +- case VKI_FUTEX_WAIT | VKI_FUTEX_PRIVATE_FLAG: ++ case VKI_FUTEX_LOCK_PI: ++ case VKI_FUTEX_WAIT_BITSET: ++ case VKI_FUTEX_WAIT_REQUEUE_PI: + if (ARG4 != 0) + PRE_MEM_READ( "futex(timeout)", ARG4, sizeof(struct vki_timespec) ); + break; + + case VKI_FUTEX_REQUEUE: +- case VKI_FUTEX_REQUEUE | VKI_FUTEX_PRIVATE_FLAG: + case VKI_FUTEX_CMP_REQUEUE: +- case VKI_FUTEX_CMP_REQUEUE | VKI_FUTEX_PRIVATE_FLAG: ++ case VKI_FUTEX_CMP_REQUEUE_PI: ++ case VKI_FUTEX_WAKE_OP: + PRE_MEM_READ( "futex(futex2)", ARG5, sizeof(Int) ); + break; + + case VKI_FUTEX_WAKE: +- case VKI_FUTEX_WAKE | VKI_FUTEX_PRIVATE_FLAG: + case VKI_FUTEX_FD: ++ case VKI_FUTEX_WAKE_BITSET: ++ case VKI_FUTEX_TRYLOCK_PI: ++ case VKI_FUTEX_UNLOCK_PI: + /* no additional pointers */ + break; + diff --git a/valgrind.spec b/valgrind.spec index 350ad24..732d9b6 100644 --- a/valgrind.spec +++ b/valgrind.spec @@ -1,7 +1,7 @@ Summary: Tool for finding memory management bugs in programs Name: valgrind Version: 3.4.1 -Release: 6 +Release: 7 Epoch: 1 Source0: http://www.valgrind.org/downloads/valgrind-%{version}.tar.bz2 Patch1: valgrind-3.4.1-cachegrind-improvements.patch @@ -11,6 +11,7 @@ Patch4: valgrind-3.4.1-glibc-2.10.1.patch Patch5: valgrind-3.4.1-dwarf3.patch Patch6: valgrind-3.4.1-dwarf-cfa-remember-state1.patch Patch7: valgrind-3.4.1-dwarf-cfa-remember-state2.patch +Patch8: valgrind-3.4.1-futex.patch License: GPLv2 URL: http://www.valgrind.org/ Group: Development/Debuggers @@ -71,6 +72,7 @@ or valgrind plugins. %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 %build %ifarch x86_64 ppc64 @@ -161,7 +163,10 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/pkgconfig/* %changelog -* Sun Jul 26 2009 Fedora Release Engineering - 1:3.4.1-6 +* Tue Jul 28 2009 Jakub Jelinek 3.4.1-7 +- handle futex ops newly added during last 4 years (#512121) + +* Sun Jul 26 2009 Fedora Release Engineering 3.4.1-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild * Mon Jul 13 2009 Jakub Jelinek 3.4.1-5