aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChih-hung Hsieh <chh@google.com>2016-09-30 15:51:28 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-09-30 15:51:28 +0000
commit1d77e93f7d8652e69d303f14376759e6b86c13af (patch)
treecdab3ac2f755900a086bec1879211e71da9b3896
parent2e71f4d68e0328c97c37acbaa893d7230802fabd (diff)
parent481663d81cfe4972a7c3a7cd7e3b2614ac34acfb (diff)
downloadvalgrind-1d77e93f7d8652e69d303f14376759e6b86c13af.tar.gz
Merge "Build arm target valgrind with clang/llvm."
am: 481663d81c Change-Id: Ib263b817d926a4e1f8c3cf37f0517dc798f195db
-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 ---------------- */