diff options
author | Chih-hung Hsieh <chh@google.com> | 2016-09-30 15:47:16 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2016-09-30 15:47:17 +0000 |
commit | 481663d81cfe4972a7c3a7cd7e3b2614ac34acfb (patch) | |
tree | cdab3ac2f755900a086bec1879211e71da9b3896 | |
parent | 04bcf552a28857cb029dd5b49e40e5e0750d7106 (diff) | |
parent | e397234fbcc8dfeb01ac576e013333fb8cce6e64 (diff) | |
download | valgrind-481663d81cfe4972a7c3a7cd7e3b2614ac34acfb.tar.gz |
Merge "Build arm target valgrind with clang/llvm."
-rw-r--r-- | Android.build_one.mk | 9 | ||||
-rw-r--r-- | coregrind/m_main.c | 40 |
2 files changed, 44 insertions, 5 deletions
diff --git a/Android.build_one.mk b/Android.build_one.mk index 1705cf2ef..c0ff16c28 100644 --- a/Android.build_one.mk +++ b/Android.build_one.mk @@ -25,11 +25,10 @@ vg_local_arch := $(vg_arch) vg_local_android_arch := $(TARGET_ARCH) endif -# For arm and arm64 targets, clang compiled module has other -# undefined errors, see bug 28454823. -ifeq ($(filter $TARGET_ARCH,x86 x86_64),) - LOCAL_CLANG := false -endif +# For arm64 target, clang compiled valgrind has setjmp/longjump problems, +# and gcc compiled valgrind failed many art test too. +# See bug 28454823 and 29282211. +LOCAL_CLANG_arm64 := false # Do not call (builtin) memset from VG(memset). LOCAL_CLANG_CFLAGS += -fno-builtin-memset diff --git a/coregrind/m_main.c b/coregrind/m_main.c index 140efbf23..66f04df9d 100644 --- a/coregrind/m_main.c +++ b/coregrind/m_main.c @@ -2883,6 +2883,46 @@ void __aeabi_unwind_cpp_pr1(void){ VG_(printf)("Something called __aeabi_unwind_cpp_pr1()\n"); vg_assert(0); } + +#if defined(ANDROID) && defined(__clang__) +/* Replace __aeabi_memcpy* functions with vgPlain_memcpy. */ +void* __aeabi_memcpy(void *dest, const void *src, SizeT n); +void* __aeabi_memcpy(void *dest, const void *src, SizeT n) +{ + return VG_(memcpy)(dest, src, n); +} + +void* __aeabi_memcpy4(void *dest, const void *src, SizeT n); +void* __aeabi_memcpy4(void *dest, const void *src, SizeT n) +{ + return VG_(memcpy)(dest, src, n); +} + +void* __aeabi_memcpy8(void *dest, const void *src, SizeT n); +void* __aeabi_memcpy8(void *dest, const void *src, SizeT n) +{ + return VG_(memcpy)(dest, src, n); +} + +/* Replace __aeabi_memclr* functions with vgPlain_memset. */ +void* __aeabi_memclr(void *dest, SizeT n); +void* __aeabi_memclr(void *dest, SizeT n) +{ + return VG_(memset)(dest, 0, n); +} + +void* __aeabi_memclr4(void *dest, SizeT n); +void* __aeabi_memclr4(void *dest, SizeT n) +{ + return VG_(memset)(dest, 0, n); +} + +void* __aeabi_memclr8(void *dest, SizeT n); +void* __aeabi_memclr8(void *dest, SizeT n) +{ + return VG_(memset)(dest, 0, n); +} +#endif /* ANDROID __clang__ */ #endif /* ---------------- Requirement 2 ---------------- */ |