]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add an intercept for memrchr. Needed for amd64 Ubuntu 12.04.
authorJulian Seward <jseward@acm.org>
Sat, 4 Aug 2012 23:08:08 +0000 (23:08 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 4 Aug 2012 23:08:08 +0000 (23:08 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12833

memcheck/mc_replace_strmem.c

index be19d8271137eb3c3196905afc35cfc85eaffe45..649c7e95af660757e859bf2de547c43ad3802d7b 100644 (file)
@@ -95,6 +95,7 @@
    20330 STRCSPN
    20340 STRSPN
    20350 STRCASESTR
+   20360 MEMRCHR
 */
 
 
@@ -751,6 +752,32 @@ static inline void my_exit ( int x )
 #endif
 
 
+/*---------------------- memrchr ----------------------*/
+
+#define MEMRCHR(soname, fnname) \
+   void* VG_REPLACE_FUNCTION_EZU(20360,soname,fnname) \
+            (const void *s, int c, SizeT n); \
+   void* VG_REPLACE_FUNCTION_EZU(20360,soname,fnname) \
+            (const void *s, int c, SizeT n) \
+   { \
+      SizeT i; \
+      UChar c0 = (UChar)c; \
+      UChar* p = (UChar*)s; \
+      for (i = 0; i < n; i++) \
+         if (p[n-1-i] == c0) return (void*)(&p[n-1-i]); \
+      return NULL; \
+   }
+
+#if defined(VGO_linux)
+ MEMRCHR(VG_Z_LIBC_SONAME, memrchr)
+
+#elif defined(VGO_darwin)
+ //MEMRCHR(VG_Z_LIBC_SONAME, memrchr)
+ //MEMRCHR(VG_Z_DYLD,        memrchr)
+
+#endif
+
+
 /*---------------------- memcpy ----------------------*/
 
 #define MEMMOVE_OR_MEMCPY(becTag, soname, fnname, do_ol_check)  \