From: Ivo Raisr Date: Tue, 16 May 2017 08:50:48 +0000 (+0000) Subject: Implement required stubs for Android on arm when built with clang/llvm. X-Git-Tag: svn/VALGRIND_3_13_0~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3cc4dcf7e6669556a73fac781648d7827efe32f;p=thirdparty%2Fvalgrind.git Implement required stubs for Android on arm when built with clang/llvm. Fixes BZ#368529 Slightly modified patch by: Elliott Hughes git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16384 --- diff --git a/NEWS b/NEWS index 6c8a9921e4..f98c78e7e8 100644 --- a/NEWS +++ b/NEWS @@ -117,6 +117,7 @@ where XXXXXX is the bug number as listed below. 362223 assertion failed when .valgrindrc is a directory instead of a file 367543 bt/btc/btr/bts x86/x86_64 instructions are poorly-handled wrt flags 367942 Segfault vgPlain_do_sys_sigaction (m_signals.c:1138) +368529 Android arm target link error, missing atexit and pthread_atfork 368863 WARNING: unhandled arm64-linux syscall: 100 (get_robust_list) 368865 WARNING: unhandled arm64-linux syscall: 272 (kcmp) 368868 disInstr(arm64): unhandled instruction 0xD53BE000 = cntfrq_el0 (ARMv8) diff --git a/coregrind/m_main.c b/coregrind/m_main.c index d580b9949d..8054152529 100644 --- a/coregrind/m_main.c +++ b/coregrind/m_main.c @@ -2439,7 +2439,47 @@ void __aeabi_unwind_cpp_pr1(void){ VG_(printf)("Something called __aeabi_unwind_cpp_pr1()\n"); vg_assert(0); } -#endif + +#if defined(__ANDROID__) +/* 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 /* defined(__ANDROID__) */ +#endif /* defined(VGP_arm_linux) */ /* ---------------- Requirement 2 ---------------- */