valgrind: update for glibc-2.13, patches from Arch.

This commit is contained in:
Juan RP 2011-02-02 18:12:15 +01:00
parent ac2187eb3d
commit 6d0a781c66
3 changed files with 184 additions and 2 deletions

View File

@ -0,0 +1,151 @@
Index: memcheck/mc_replace_strmem.c
===================================================================
--- memcheck/mc_replace_strmem.c (revision 11477)
+++ memcheck/mc_replace_strmem.c (revision 11478)
@@ -35,10 +35,13 @@
#include "pub_tool_redir.h"
#include "pub_tool_tooliface.h"
#include "valgrind.h"
+#include "config.h"
#include "mc_include.h"
#include "memcheck.h"
+#include <ctype.h>
+
/* ---------------------------------------------------------------------
We have our own versions of these functions for two reasons:
(a) it allows us to do overlap checking
@@ -403,6 +406,120 @@
#endif
+#define STRCASECMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2 ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = tolower(*(unsigned char *)s1); \
+ c2 = tolower(*(unsigned char *)s2); \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCASECMP(VG_Z_LIBC_SONAME, strcasecmp)
+#if defined(VGO_linux)
+STRCASECMP(VG_Z_LIBC_SONAME, __GI_strcasecmp)
+#endif
+
+
+#define STRNCASECMP(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax ) \
+ { \
+ SizeT n = 0; \
+ while (True) { \
+ if (n >= nmax) return 0; \
+ if (*s1 == 0 && *s2 == 0) return 0; \
+ if (*s1 == 0) return -1; \
+ if (*s2 == 0) return 1; \
+ \
+ if (tolower(*(unsigned char*)s1) < tolower(*(unsigned char*)s2)) return -1; \
+ if (tolower(*(unsigned char*)s1) > tolower(*(unsigned char*)s2)) return 1; \
+ \
+ s1++; s2++; n++; \
+ } \
+ }
+
+STRNCASECMP(VG_Z_LIBC_SONAME, strncasecmp)
+#if defined(VGO_linux)
+STRNCASECMP(VG_Z_LIBC_SONAME, __GI_strncasecmp)
+#elif defined(VGO_darwin)
+STRNCASECMP(VG_Z_DYLD, strncasecmp)
+#endif
+
+
+#ifdef HAVE_TOLOWER_L
+
+
+#define STRCASECMP_L(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, locale_t locale ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, locale_t locale ) \
+ { \
+ register unsigned char c1; \
+ register unsigned char c2; \
+ while (True) { \
+ c1 = tolower_l(*(unsigned char *)s1, locale); \
+ c2 = tolower_l(*(unsigned char *)s2, locale); \
+ if (c1 != c2) break; \
+ if (c1 == 0) break; \
+ s1++; s2++; \
+ } \
+ if ((unsigned char)c1 < (unsigned char)c2) return -1; \
+ if ((unsigned char)c1 > (unsigned char)c2) return 1; \
+ return 0; \
+ }
+
+STRCASECMP_L(VG_Z_LIBC_SONAME, strcasecmp_l)
+#if defined(VGO_linux)
+STRCASECMP_L(VG_Z_LIBC_SONAME, __GI_strcasecmp_l)
+#endif
+
+
+#define STRNCASECMP_L(soname, fnname) \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax, locale_t locale ); \
+ int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
+ ( const char* s1, const char* s2, SizeT nmax, locale_t locale ) \
+ { \
+ SizeT n = 0; \
+ while (True) { \
+ if (n >= nmax) return 0; \
+ if (*s1 == 0 && *s2 == 0) return 0; \
+ if (*s1 == 0) return -1; \
+ if (*s2 == 0) return 1; \
+ \
+ if (tolower_l(*(unsigned char*)s1, locale) < tolower_l(*(unsigned char*)s2, locale)) return -1; \
+ if (tolower_l(*(unsigned char*)s1, locale) > tolower_l(*(unsigned char*)s2, locale)) return 1; \
+ \
+ s1++; s2++; n++; \
+ } \
+ }
+
+STRNCASECMP_L(VG_Z_LIBC_SONAME, strncasecmp_l)
+#if defined(VGO_linux)
+STRNCASECMP_L(VG_Z_LIBC_SONAME, __GI_strncasecmp_l)
+#elif defined(VGO_darwin)
+STRNCASECMP_L(VG_Z_DYLD, strncasecmp_l)
+#endif
+
+
+#endif
+
+
#define STRCMP(soname, fnname) \
int VG_REPLACE_FUNCTION_ZU(soname,fnname) \
( const char* s1, const char* s2 ); \
Index: configure.in
===================================================================
--- configure.in (revision 11477)
+++ configure.in (revision 11478)
@@ -1549,6 +1549,7 @@
strstr \
syscall \
timerfd \
+ tolower_l \
utimensat \
])

View File

@ -0,0 +1,31 @@
--- config.h.in.orig 2010-10-21 06:20:49.000000000 +1000
+++ config.h.in 2011-01-19 10:31:18.476673930 +1000
@@ -33,6 +33,9 @@
/* Define to 1 if you're using glibc 2.12.x */
#undef GLIBC_2_12
+/* Define to 1 if you're using glibc 2.13.x */
+#undef GLIBC_2_13
+
/* Define to 1 if you're using glibc 2.2.x */
#undef GLIBC_2_2
--- configure.orig 2010-10-21 11:16:18.000000000 +1000
+++ configure 2011-01-19 10:32:20.346673926 +1000
@@ -6367,6 +6367,16 @@
DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
;;
+ 2.13)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: 2.13 family" >&5
+$as_echo "2.13 family" >&6; }
+
+$as_echo "#define GLIBC_2_13 1" >>confdefs.h
+
+ DEFAULT_SUPP="glibc-2.X.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.34567-NPTL-helgrind.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.X-drd.supp ${DEFAULT_SUPP}"
+ ;;
aix5)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX 5.1 or 5.2 or 5.3" >&5
$as_echo "AIX 5.1 or 5.2 or 5.3" >&6; }

View File

@ -1,7 +1,7 @@
# Template file for 'valgrind'
pkgname=valgrind
version=3.6.0
revision=1
revision=2
distfiles="http://www.valgrind.org/downloads/$pkgname-$version.tar.bz2"
build_style=gnu_configure
configure_args="--enable-tls"
@ -16,7 +16,7 @@ long_desc="
detect a lot of problems that are otherwise very hard to find/diagnose."
subpackages="$pkgname-devel"
Add_dependency run glibc ">=2.12<2.13"
Add_dependency run glibc ">=2.13<2.14"
Add_dependency run openmpi
Add_dependency full perl ">=0"
Add_dependency build pkg-config