| Index: tools/android/asan/asan_device_setup.sh
|
| diff --git a/tools/android/asan/asan_device_setup.sh b/tools/android/asan/asan_device_setup.sh
|
| deleted file mode 100755
|
| index 5948f2b97982231b94a1691ae0bef56309a7878e..0000000000000000000000000000000000000000
|
| --- a/tools/android/asan/asan_device_setup.sh
|
| +++ /dev/null
|
| @@ -1,194 +0,0 @@
|
| -#!/bin/bash -e
|
| -#===- lib/asan/scripts/asan_device_setup.py -----------------------------------===#
|
| -#
|
| -# The LLVM Compiler Infrastructure
|
| -#
|
| -# This file is distributed under the University of Illinois Open Source
|
| -# License. See LICENSE.TXT for details.
|
| -#
|
| -# Prepare Android device to run ASan applications.
|
| -#
|
| -#===------------------------------------------------------------------------===#
|
| -
|
| -
|
| -HERE="$(cd "$(dirname "$0")" && pwd)"
|
| -
|
| -revert=no
|
| -extra_options=
|
| -device=
|
| -lib=
|
| -
|
| -function usage {
|
| - echo "usage: $0 [--revert] [--device device-id] [--lib path] [--extra_options options]"
|
| - echo " --revert: Uninstall ASan from the device."
|
| - echo " --lib: Path to ASan runtime library."
|
| - echo " --extra_options: Extra ASAN_OPTIONS."
|
| - echo " --device: Install to the given device. Use 'adb devices' to find"
|
| - echo " device-id."
|
| - echo
|
| - exit 1
|
| -}
|
| -
|
| -while [[ $# > 0 ]]; do
|
| - case $1 in
|
| - --revert)
|
| - revert=yes
|
| - ;;
|
| - --extra-options)
|
| - shift
|
| - if [[ $# == 0 ]]; then
|
| - echo "--extra-options requires an argument."
|
| - exit 1
|
| - fi
|
| - extra_options="$1"
|
| - ;;
|
| - --lib)
|
| - shift
|
| - if [[ $# == 0 ]]; then
|
| - echo "--lib requires an argument."
|
| - exit 1
|
| - fi
|
| - lib="$1"
|
| - ;;
|
| - --device)
|
| - shift
|
| - if [[ $# == 0 ]]; then
|
| - echo "--device requires an argument."
|
| - exit 1
|
| - fi
|
| - device="$1"
|
| - ;;
|
| - *)
|
| - usage
|
| - ;;
|
| - esac
|
| - shift
|
| -done
|
| -
|
| -ADB=${ADB:-adb}
|
| -if [[ x$device != x ]]; then
|
| - ADB="$ADB -s $device"
|
| -fi
|
| -
|
| -ASAN_RT="libclang_rt.asan-arm-android.so"
|
| -
|
| -if [[ x$revert == xyes ]]; then
|
| - echo '>> Uninstalling ASan'
|
| - $ADB root
|
| - $ADB wait-for-device
|
| - $ADB remount
|
| - $ADB shell mv /system/bin/app_process.real /system/bin/app_process
|
| - $ADB shell rm /system/bin/asanwrapper
|
| - $ADB shell rm /system/lib/$ASAN_RT
|
| -
|
| - echo '>> Restarting shell'
|
| - $ADB shell stop
|
| - $ADB shell start
|
| -
|
| - echo '>> Done'
|
| - exit 0
|
| -fi
|
| -
|
| -if [[ -d "$lib" ]]; then
|
| - ASAN_RT_PATH="$lib"
|
| -elif [[ -f "$lib" && "$lib" == *"$ASAN_RT" ]]; then
|
| - ASAN_RT_PATH=$(dirname "$lib")
|
| -elif [[ -f "$HERE/$ASAN_RT" ]]; then
|
| - ASAN_RT_PATH="$HERE"
|
| -elif [[ $(basename "$HERE") == "bin" ]]; then
|
| - # We could be in the toolchain's base directory.
|
| - # Consider ../lib and ../lib/clang/$VERSION/lib/linux.
|
| - P=$(ls "$HERE"/../lib/"$ASAN_RT" "$HERE"/../lib/clang/*/lib/linux/"$ASAN_RT" 2>/dev/null | sort | tail -1)
|
| - if [[ -n "$P" ]]; then
|
| - ASAN_RT_PATH="$(dirname "$P")"
|
| - fi
|
| -fi
|
| -
|
| -if [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT" ]]; then
|
| - echo "ASan runtime library not found"
|
| - exit 1
|
| -fi
|
| -
|
| -TMPDIRBASE=$(mktemp -d)
|
| -TMPDIROLD="$TMPDIRBASE/old"
|
| -TMPDIR="$TMPDIRBASE/new"
|
| -mkdir "$TMPDIROLD"
|
| -
|
| -echo '>> Remounting /system rw'
|
| -$ADB root
|
| -$ADB wait-for-device
|
| -$ADB remount
|
| -
|
| -echo '>> Copying files from the device'
|
| -$ADB pull /system/bin/app_process "$TMPDIROLD"
|
| -$ADB pull /system/bin/app_process.real "$TMPDIROLD" || true
|
| -$ADB pull /system/bin/asanwrapper "$TMPDIROLD" || true
|
| -$ADB pull /system/lib/libclang_rt.asan-arm-android.so "$TMPDIROLD" || true
|
| -cp -r "$TMPDIROLD" "$TMPDIR"
|
| -
|
| -if ! [[ -f "$TMPDIR/app_process" ]]; then
|
| - echo "app_process missing???"
|
| - exit 1
|
| -fi
|
| -
|
| -if [[ -f "$TMPDIR/app_process.real" ]]; then
|
| - echo "app_process.real exists, updating the wrapper"
|
| -else
|
| - echo "app_process.real missing, new installation"
|
| - mv "$TMPDIR/app_process" "$TMPDIR/app_process.real"
|
| -fi
|
| -
|
| -echo '>> Generating wrappers'
|
| -
|
| -cp "$ASAN_RT_PATH/$ASAN_RT" "$TMPDIR/"
|
| -
|
| -# FIXME: alloc_dealloc_mismatch=0 prevents a failure in libdvm startup,
|
| -# which may or may not be a real bug (probably not).
|
| -ASAN_OPTIONS=start_deactivated=1,alloc_dealloc_mismatch=0
|
| -if [[ x$extra_options != x ]] ; then
|
| - ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"
|
| -fi
|
| -
|
| -# Zygote wrapper.
|
| -cat <<EOF >"$TMPDIR/app_process"
|
| -#!/system/bin/sh
|
| -ASAN_OPTIONS=$ASAN_OPTIONS \\
|
| -LD_PRELOAD=libclang_rt.asan-arm-android.so \\
|
| -exec /system/bin/app_process.real \$@
|
| -
|
| -EOF
|
| -
|
| -# General command-line tool wrapper (use for anything that's not started as
|
| -# zygote).
|
| -cat <<EOF >"$TMPDIR/asanwrapper"
|
| -#!/system/bin/sh
|
| -LD_PRELOAD=libclang_rt.asan-arm-android.so \\
|
| -exec \$@
|
| -
|
| -EOF
|
| -
|
| -if ! ( cd "$TMPDIRBASE" && diff -qr old/ new/ ) ; then
|
| - echo '>> Pushing files to the device'
|
| - $ADB push "$TMPDIR/$ASAN_RT" /system/lib/
|
| - $ADB push "$TMPDIR/app_process" /system/bin/app_process
|
| - $ADB push "$TMPDIR/app_process.real" /system/bin/app_process.real
|
| - $ADB push "$TMPDIR/asanwrapper" /system/bin/asanwrapper
|
| - $ADB shell chown root.shell \
|
| - /system/bin/app_process \
|
| - /system/bin/app_process.real \
|
| - /system/bin/asanwrapper
|
| - $ADB shell chmod 755 \
|
| - /system/bin/app_process \
|
| - /system/bin/app_process.real \
|
| - /system/bin/asanwrapper
|
| -
|
| - echo '>> Restarting shell (asynchronous)'
|
| - $ADB shell stop
|
| - $ADB shell start
|
| -
|
| - echo '>> Please wait until the device restarts'
|
| -else
|
| - echo '>> Device is up to date'
|
| -fi
|
| -
|
| -rm -r "$TMPDIRBASE"
|
|
|