Merge "Build arm target valgrind with clang/llvm."
diff --git a/Android.build_one.mk b/Android.build_one.mk
index 1705cf2..c0ff16c 100644
--- a/Android.build_one.mk
+++ b/Android.build_one.mk
@@ -25,11 +25,10 @@
 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 140efbf..66f04df 100644
--- a/coregrind/m_main.c
+++ b/coregrind/m_main.c
@@ -2883,6 +2883,46 @@
    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 ---------------- */