Source code
Revision control
Copy as Markdown
Other Tools
#!/system/bin/sh
# shellcheck shell=ksh
# call getprop before setting LD_PRELOAD
os_version=$(getprop ro.build.version.sdk)
# These options mirror those in mozglue/build/AsanOptions.cpp
# except for fast_unwind_* which are only needed on Android
options=(
allow_user_segv_handler=1
alloc_dealloc_mismatch=0
detect_leaks=0
fast_unwind_on_check=1
fast_unwind_on_fatal=1
max_free_fill_size=268435456
max_malloc_fill_size=268435456
malloc_fill_byte=228
free_fill_byte=229
handle_sigill=1
allocator_may_return_null=1
)
if [ -e "/data/local/tmp/asan.options.gecko" ]; then
options+=("$(tr -d '\n' < /data/local/tmp/asan.options.gecko)")
fi
# : is the usual separator for ASAN options
# save and reset IFS so it doesn't interfere with later commands
old_ifs="$IFS"
IFS=:
ASAN_OPTIONS="${options[*]}"
export ASAN_OPTIONS
IFS="$old_ifs"
LIB_PATH="$(cd "$(dirname "$0")" && pwd)"
LD_PRELOAD="$(ls "$LIB_PATH"/libclang_rt.asan-*-android.so)"
export LD_PRELOAD
cmd="$1"
shift
# enable debugging
# note that wrap.sh is not supported before android 8.1 (API 27)
if [ "$os_version" -eq "27" ]; then
args=("-Xrunjdwp:transport=dt_android_adb,suspend=n,server=y" -Xcompiler-option --debuggable)
elif [ "$os_version" -eq "28" ]; then
args=(-XjdwpProvider:adbconnection "-XjdwpOptions:suspend=n,server=y" -Xcompiler-option --debuggable)
else
args=(-XjdwpProvider:adbconnection "-XjdwpOptions:suspend=n,server=y")
fi
exec "$cmd" "${args[@]}" "$@"