aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChih-hung Hsieh <chh@google.com>2016-09-30 15:47:16 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2016-09-30 15:47:17 +0000
commit481663d81cfe4972a7c3a7cd7e3b2614ac34acfb (patch)
treecdab3ac2f755900a086bec1879211e71da9b3896
parent04bcf552a28857cb029dd5b49e40e5e0750d7106 (diff)
parente397234fbcc8dfeb01ac576e013333fb8cce6e64 (diff)
downloadvalgrind-481663d81cfe4972a7c3a7cd7e3b2614ac34acfb.tar.gz
Merge "Build arm target valgrind with clang/llvm."
-rw-r--r--Android.build_one.mk9
-rw-r--r--coregrind/m_main.c40
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 ---------------- */