aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChih-hung Hsieh <chh@google.com>2016-09-30 16:06:00 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-09-30 16:06:00 +0000
commit32b3d70ce6b8654b7cf3d15f62b2966a2207889b (patch)
treecdab3ac2f755900a086bec1879211e71da9b3896
parent27d799339b695babf2db30e474ae2fbdaa4d3b22 (diff)
parentbb034a657e7ffebd439da2b946973c732d0f8bed (diff)
downloadvalgrind-32b3d70ce6b8654b7cf3d15f62b2966a2207889b.tar.gz
Merge "Build arm target valgrind with clang/llvm." am: 481663d81c am: 1d77e93f7d am: 5d98b9995d
am: bb034a657e Change-Id: I386c9749f83c99a32c2e875aca1e5b3f46d38b6b
-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 ---------------- */