Support AddressSanitizer on v10.100.0
Building x64 version on Linux fails with libclang_rt.asan-x86_64-android.so and libclang_rt.asan_static-x86_64-android.a missing
$ NO_INTL=true ./scripts/build.sh android x64
ninja: Entering directory `v8/out.v8.x64'
[1/1] SOLINK_MODULE ./libv8android.so
FAILED: libv8android.so lib.unstripped/libv8android.so
../third_party/llvm-build/Release+Asserts/bin/clang++ -shared -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--color-diagnostics -Wl,--no-rosegment -Wl,--no-call-graph-profile-sort -Wl,--exclude-libs=libgcc.a -Wl,--exclude-libs=libvpx_assembly_arm.a --rtlib=libgcc --target=x86_64-linux-android23 -m64 -no-canonical-prefixes --sysroot=../android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/sysroot --gcc-toolchain=../android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64 -Wl,--warn-shared-textrel -fsanitize=address -Wl,--warn-shared-textrel -Wl,-O2 -Wl,--gc-sections -Wl,-u_sanitizer_options_link_helper -fsanitize=address -o "./lib.unstripped/libv8android.so" -Wl,-soname="libv8android.so" @"./libv8android.so.rsp" && ../third_party/llvm-build/Release+Asserts/bin/llvm-strip -o "./libv8android.so" "./lib.unstripped/libv8android.so"
ld.lld: error: cannot open ../third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan-x86_64-android.so: No such file or directory
ld.lld: error: cannot open ../third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan_static-x86_64-android.a: No such file or directory
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
However x64 dependencies are missing while arm, x86 and arm64 are present
$ ls -al v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan*android*
-rwxr-xr-x 1 ubuntu ubuntu 1390064 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan-aarch64-android.so
-rwxr-xr-x 1 ubuntu ubuntu 1316764 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan-arm-android.so
-rwxr-xr-x 1 ubuntu ubuntu 1385684 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan-i686-android.so
-rw-r--r-- 1 ubuntu ubuntu 5576 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan_static-aarch64-android.a
-rw-r--r-- 1 ubuntu ubuntu 4452 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan_static-arm-android.a
-rw-r--r-- 1 ubuntu ubuntu 4536 2月 13 16:34 v8/third_party/llvm-build/Release+Asserts/lib/clang/15.0.0/lib/linux/libclang_rt.asan_static-i686-android.a
https://github.com/Sunbreak/v8-android-buildscripts/tree/7.8.1-asan has the same problem but a different clang version.
We'd better fix missing dependencies in llvm-build's asserts or use NDK's AddressSanitizer dependencies
$ ls v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan*android*
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-aarch64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-aarch64-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-aarch64-android.so
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-arm-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-arm-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-arm-android.so
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-aarch64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-aarch64-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-arm-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-arm-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-i686-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-x86_64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan_cxx-x86_64-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-i686-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-i686-android.so
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-preinit-aarch64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-preinit-arm-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-preinit-i686-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-preinit-x86_64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-x86_64-android.a
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-x86_64-android.a.syms
v8/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.9/lib/linux/libclang_rt.asan-x86_64-android.so
hi there! thanks for your pr. could you share the insight of using asan libs in production apps?
hi there! thanks for your pr. could you share the insight of using asan libs in production apps?
ASan helps to debug but reduce the performance. We use it for local test only
right, but the pr tends to change the release build. imo, if someone needs to turn on asan, we could just have a flag but comment out like the debug build flag
Yep. This PR is kind of draft. Feel free to change if you want