[compiler-rt] r201545 - [asan] Make __cxa_demangle non-weak symbol on Android.
Hans Wennborg
hans at chromium.org
Tue Mar 4 09:36:14 PST 2014
Hi Evgeniy,
Trying to build the Clang package for Linux/Android in Chromium, I now
fail to link the Android ASan run-time. I suspect this commit might
have something to do with it. This is the error I'm getting:
SO: clang_linux/asan-arm-android/arm-android:
/usr/local/google/work/chromium/src/third_party/llvm-build/tools/clang/runtime/compiler-rt/clang_linux/asan-arm-android/arm-android/libcompiler_rt.so
../../../llvm-build/android-toolchain/lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld:
/usr/local/google/work/chromium/src/third_party/llvm-build/tools/clang/runtime/compiler-rt/clang_linux/asan-arm-android/arm-android/SubDir.lib__sanitizer_common/sanitizer_symbolizer_posix_libcdep.o:
in function __sanitizer::POSIXSymbolizer::Demangle(char
const*):/usr/local/google/work/chromium/src/third_party/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc(.text._ZN11__sanitizer15POSIXSymbolizer8DemangleEPKc+0xd0):
error: undefined reference to '__cxa_demangle'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [/usr/local/google/work/chromium/src/third_party/llvm-build/tools/clang/runtime/compiler-rt/clang_linux/asan-arm-android/arm-android/libcompiler_rt.so]
Error 1
Any ideas?
Thanks,
Hans
On Mon, Feb 17, 2014 at 11:34 PM, Evgeniy Stepanov
<eugeni.stepanov at gmail.com> wrote:
> Author: eugenis
> Date: Tue Feb 18 01:34:52 2014
> New Revision: 201545
>
> URL: http://llvm.org/viewvc/llvm-project?rev=201545&view=rev
> Log:
> [asan] Make __cxa_demangle non-weak symbol on Android.
>
> This fixes global-demangle.cc test on Android.
>
> https://code.google.com/p/address-sanitizer/issues/detail?id=264
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc?rev=201545&r1=201544&r2=201545&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc Tue Feb 18 01:34:52 2014
> @@ -32,10 +32,18 @@
> // C++ demangling function, as required by Itanium C++ ABI. This is weak,
> // because we do not require a C++ ABI library to be linked to a program
> // using sanitizers; if it's not present, we'll just use the mangled name.
> +//
> +// On Android, this is not weak, because we are using shared runtime library
> +// AND static libstdc++, and there is no good way to conditionally export
> +// __cxa_demangle. By making this a non-weak symbol, we statically link
> +// __cxa_demangle into ASan runtime library.
> namespace __cxxabiv1 {
> - extern "C" SANITIZER_WEAK_ATTRIBUTE
> - char *__cxa_demangle(const char *mangled, char *buffer,
> - size_t *length, int *status);
> + extern "C"
> +#if !SANITIZER_ANDROID
> + SANITIZER_WEAK_ATTRIBUTE
> +#endif
> + char *__cxa_demangle(const char *mangled, char *buffer, size_t *length,
> + int *status);
> }
>
> namespace __sanitizer {
> @@ -47,7 +55,7 @@ static const char *DemangleCXXABI(const
> // own demangler (libc++abi's implementation could be adapted so that
> // it does not allocate). For now, we just call it anyway, and we leak
> // the returned value.
> - if (__cxxabiv1::__cxa_demangle)
> + if (SANITIZER_ANDROID || &__cxxabiv1::__cxa_demangle)
> if (const char *demangled_name =
> __cxxabiv1::__cxa_demangle(name, 0, 0, 0))
> return demangled_name;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list