diff options
author | Chih-hung Hsieh <chh@google.com> | 2016-09-30 15:56:27 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2016-09-30 15:56:27 +0000 |
commit | bb034a657e7ffebd439da2b946973c732d0f8bed (patch) | |
tree | cdab3ac2f755900a086bec1879211e71da9b3896 | |
parent | 3f7f7c032ac4e44763c4eea4518085029ed19080 (diff) | |
parent | 5d98b9995d24067fa1e07d6d014d418f0c5092ae (diff) | |
download | valgrind-bb034a657e7ffebd439da2b946973c732d0f8bed.tar.gz |
Merge "Build arm target valgrind with clang/llvm." am: 481663d81c am: 1d77e93f7d
am: 5d98b9995d
Change-Id: I2777fb6579feda3dfc96ebda60bfc9a99d745073
-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 ---------------- */ |