diff options
author | Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org> | 2013-03-27 14:43:56 +0100 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2013-07-25 17:02:11 +0530 |
commit | a9e44692ff649edae6bade0e92bdcfe2f2645391 (patch) | |
tree | 7ea2e38c662cbe1ca5dc1454812a00469663fc20 | |
parent | 99cfba5460bef5032a52e432ce0936b731e6d8e2 (diff) | |
download | valgrind-linaro_android_4.4.3.tar.gz |
valgrind: Fix build with gcc 4.8 and clanglinaro_android_4.4.4linaro_android_4.4.3linaro_android_4.4.2linaro_android_4.4linaro_android_4.3.1linaro_android_4.3
gcc 4.8 can detect memmove-like code (such as parts of
cachesim_*_doref in cg_sim.c) and create a memmove reference
instead -- so like memcpy and memset, memmove needs to be
made available.
clang has similar code, but generates calls to __aeabi_memcpy,
__aeabi_memmove and __aeabi_memset rather than memcpy/memmove/memset.
Make those available too.
Change-Id: I8fae9afc956f6b2bd6cca4c74e0c1e8307485abd
Signed-off-by: Bernhard Rosenkränzer <Bernhard.Rosenkranzer@linaro.org>
-rw-r--r-- | main/coregrind/m_main.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/main/coregrind/m_main.c b/main/coregrind/m_main.c index 9ac838737..77dcdc59a 100644 --- a/main/coregrind/m_main.c +++ b/main/coregrind/m_main.c @@ -2660,6 +2660,23 @@ void* memcpy(void *dest, const void *src, SizeT n); void* memcpy(void *dest, const void *src, SizeT n) { return VG_(memcpy)(dest,src,n); } +void* memmove(void *dest, const void *src, SizeT n); +void* memmove(void *a, const void *b, SizeT size) { + char *A = (char*)a; + const char *B = (const char*)b; + if (A < B) { + unsigned long i; + for (i = 0; i < size; i++) { + A[i] = B[i]; + } + } else if(A > B) { + unsigned long i; + for (i = 0; i < size; i++) { + A[size - i - 1] = B[size - i - 1]; + } + } + return a; +} void* memset(void *s, int c, SizeT n); void* memset(void *s, int c, SizeT n) { return VG_(memset)(s,c,n); @@ -2693,6 +2710,21 @@ void __aeabi_unwind_cpp_pr1(void){ VG_(printf)("Something called __aeabi_unwind_cpp_pr1()\n"); vg_assert(0); } + +void __aeabi_memcpy(void *d, const void *s, SizeT n); +void __aeabi_memcpy(void *d, const void *s, SizeT n) { + memcpy(d, s, n); +} + +void __aeabi_memmove(void *d, const void *s, SizeT n); +void __aeabi_memmove(void *d, const void *s, SizeT n) { + memmove(d, s, n); +} + +void __aeabi_memset(void *d, SizeT n, int c); +void __aeabi_memset(void *d, SizeT n, int c) { + memset(d, c, n); +} #endif /* ---------------- Requirement 2 ---------------- */ |