[valgrind] valgrind-3.6.1-4
Jakub Jelinek
jakub at fedoraproject.org
Mon Jun 13 15:47:42 UTC 2011
commit 6e92762a5a45503043dfd8ed2f2b38240ecce06d
Author: Jakub Jelinek <jakub at redhat.com>
Date: Mon Jun 13 17:47:30 2011 +0200
valgrind-3.6.1-4
valgrind-3.6.1-x86_64-memcpy-memmove.patch | 92 ++++++++++++++++++++++++++++
valgrind.spec | 7 ++-
2 files changed, 98 insertions(+), 1 deletions(-)
---
diff --git a/valgrind-3.6.1-x86_64-memcpy-memmove.patch b/valgrind-3.6.1-x86_64-memcpy-memmove.patch
new file mode 100644
index 0000000..39bc1cf
--- /dev/null
+++ b/valgrind-3.6.1-x86_64-memcpy-memmove.patch
@@ -0,0 +1,92 @@
+--- valgrind/memcheck/mc_replace_strmem.c.jj 2011-06-08 17:26:29.000000000 +0200
++++ valgrind/memcheck/mc_replace_strmem.c 2011-06-09 14:49:11.000000000 +0200
+@@ -558,11 +558,7 @@ MEMCHR(VG_Z_DYLD, memchr)
+ #endif
+
+
+-#define MEMCPY(soname, fnname) \
+- void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+- ( void *dst, const void *src, SizeT len ); \
+- void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+- ( void *dst, const void *src, SizeT len ) \
++#define MEMCPY_BODY \
+ { \
+ if (is_overlap(dst, src, len, len)) \
+ RECORD_OVERLAP_ERROR("memcpy", dst, src, len); \
+@@ -628,6 +624,18 @@ MEMCHR(VG_Z_DYLD, memchr)
+ \
+ return dst; \
+ }
++#define MEMCPY(soname, fnname) \
++ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
++ ( void *dst, const void *src, SizeT len ); \
++ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
++ ( void *dst, const void *src, SizeT len ) \
++ MEMCPY_BODY
++#define MEMCPY_ZZ(soname, fnname) \
++ void* VG_REPLACE_FUNCTION_ZZ(soname,fnname) \
++ ( void *dst, const void *src, SizeT len ); \
++ void* VG_REPLACE_FUNCTION_ZZ(soname,fnname) \
++ ( void *dst, const void *src, SizeT len ) \
++ MEMCPY_BODY
+
+ MEMCPY(VG_Z_LIBC_SONAME, memcpy)
+ #if defined(VGO_linux)
+@@ -636,6 +644,11 @@ MEMCPY(VG_Z_LD64_SO_1, memcpy) /* ld64
+ #elif defined(VGO_darwin)
+ MEMCPY(VG_Z_DYLD, memcpy)
+ #endif
++#if defined(VGP_amd64_linux)
++/* In glibc 2.14+, memcpy at GLIBC_2.2.5 is an alias to memmove and only
++ memcpy@@GLIBC_2.14 is a real memcpy. */
++MEMCPY_ZZ(VG_Z_LIBC_SONAME, memcpyZAZAGLIBCZu2Zd14) /* memcpy@@GLIBC_2.14 */
++#endif
+ /* icc9 blats these around all over the place. Not only in the main
+ executable but various .so's. They are highly tuned and read
+ memory beyond the source boundary (although work correctly and
+@@ -738,11 +751,7 @@ MEMSET(VG_Z_DYLD, memset)
+ #endif
+
+
+-#define MEMMOVE(soname, fnname) \
+- void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+- (void *dstV, const void *srcV, SizeT n); \
+- void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+- (void *dstV, const void *srcV, SizeT n) \
++#define MEMMOVE_BODY \
+ { \
+ SizeT i; \
+ Char* dst = (Char*)dstV; \
+@@ -758,12 +767,31 @@ MEMSET(VG_Z_DYLD, memset)
+ } \
+ return dst; \
+ }
++#define MEMMOVE(soname, fnname) \
++ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
++ (void *dstV, const void *srcV, SizeT n); \
++ void* VG_REPLACE_FUNCTION_ZU(soname,fnname) \
++ (void *dstV, const void *srcV, SizeT n) \
++ MEMMOVE_BODY
++#define MEMMOVE_ZZ(soname, fnname) \
++ void* VG_REPLACE_FUNCTION_ZZ(soname,fnname) \
++ (void *dstV, const void *srcV, SizeT n); \
++ void* VG_REPLACE_FUNCTION_ZZ(soname,fnname) \
++ (void *dstV, const void *srcV, SizeT n) \
++ MEMMOVE_BODY
+
+ MEMMOVE(VG_Z_LIBC_SONAME, memmove)
+ #if defined(VGO_darwin)
+ MEMMOVE(VG_Z_DYLD, memmove)
+ #endif
+-
++#if defined(VGP_amd64_linux)
++/* In glibc 2.14+, memcpy at GLIBC_2.2.5 is an alias to memmove and only
++ memcpy@@GLIBC_2.14 is a real memcpy. It would be nice for
++ memcpy at GLIBC_2.2.5 to differentiate based on whether the caller
++ was calling memmove or memcpy at GLIBC_2.2.5, for now just treat
++ all such calls as memmove. */
++MEMMOVE_ZZ(VG_Z_LIBC_SONAME, memcpyZAGLIBCZu2Zd2Zd5) /* memcpy at GLIBC_2.2.5 */
++#endif
+
+ #define BCOPY(soname, fnname) \
+ void VG_REPLACE_FUNCTION_ZU(soname,fnname) \
diff --git a/valgrind.spec b/valgrind.spec
index d1ef115..8ea3de9 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -1,7 +1,7 @@
Summary: Tool for finding memory management bugs in programs
Name: valgrind
Version: 3.6.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Epoch: 1
Source0: http://www.valgrind.org/downloads/valgrind-%{version}.tar.bz2
Patch1: valgrind-3.6.1-cachegrind-improvements.patch
@@ -24,6 +24,7 @@ Patch17: valgrind-3.6.1-gen_insn_test.patch
Patch18: valgrind-3.6.1-x86-ldso-strlen.patch
Patch19: valgrind-3.6.1-ppc64-build.patch
Patch20: valgrind-3.6.1-tests-_GNU_SOURCE.patch
+Patch21: valgrind-3.6.1-x86_64-memcpy-memmove.patch
License: GPLv2
URL: http://www.valgrind.org/
Group: Development/Debuggers
@@ -118,6 +119,7 @@ for details.
%patch18 -p1
%patch19 -p1
%patch20 -p1
+%patch21 -p1
chmod 755 none/tests/s390x/filter_stderr || :
@@ -219,6 +221,9 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
+* Mon Jun 13 2011 Jakub Jelinek <jakub at redhat.com> 3.6.1-4
+- fix memcpy/memmove redirection on x86_64 (#705790)
+
* Wed Jun 8 2011 Jakub Jelinek <jakub at redhat.com> 3.6.1-3
- fix testing against glibc 2.14
More information about the scm-commits
mailing list