From ea5434e0dda8ec03f8f30fbd5a9c1d9fc34ef4c1 Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Sat, 4 Aug 2012 23:08:08 +0000 Subject: [PATCH] Add an intercept for memrchr. Needed for amd64 Ubuntu 12.04. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12833 --- memcheck/mc_replace_strmem.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/memcheck/mc_replace_strmem.c b/memcheck/mc_replace_strmem.c index be19d82711..649c7e95af 100644 --- a/memcheck/mc_replace_strmem.c +++ b/memcheck/mc_replace_strmem.c @@ -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) \ -- 2.47.2