Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1153)

Side by Side Diff: tools/android/asan/asan_device_setup.sh

Issue 870603002: Update asan_device_setup.sh from LLVM r226816. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tbr, notry Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « build/android/pylib/valgrind_tools.py ('k') | tools/android/asan/third_party/README.chromium » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/bin/bash -e
2 #===- lib/asan/scripts/asan_device_setup.py -----------------------------------= ==#
3 #
4 # The LLVM Compiler Infrastructure
5 #
6 # This file is distributed under the University of Illinois Open Source
7 # License. See LICENSE.TXT for details.
8 #
9 # Prepare Android device to run ASan applications.
10 #
11 #===------------------------------------------------------------------------===#
12
13
14 HERE="$(cd "$(dirname "$0")" && pwd)"
15
16 revert=no
17 extra_options=
18 device=
19 lib=
20
21 function usage {
22 echo "usage: $0 [--revert] [--device device-id] [--lib path] [--extra_option s options]"
23 echo " --revert: Uninstall ASan from the device."
24 echo " --lib: Path to ASan runtime library."
25 echo " --extra_options: Extra ASAN_OPTIONS."
26 echo " --device: Install to the given device. Use 'adb devices' to find"
27 echo " device-id."
28 echo
29 exit 1
30 }
31
32 while [[ $# > 0 ]]; do
33 case $1 in
34 --revert)
35 revert=yes
36 ;;
37 --extra-options)
38 shift
39 if [[ $# == 0 ]]; then
40 echo "--extra-options requires an argument."
41 exit 1
42 fi
43 extra_options="$1"
44 ;;
45 --lib)
46 shift
47 if [[ $# == 0 ]]; then
48 echo "--lib requires an argument."
49 exit 1
50 fi
51 lib="$1"
52 ;;
53 --device)
54 shift
55 if [[ $# == 0 ]]; then
56 echo "--device requires an argument."
57 exit 1
58 fi
59 device="$1"
60 ;;
61 *)
62 usage
63 ;;
64 esac
65 shift
66 done
67
68 ADB=${ADB:-adb}
69 if [[ x$device != x ]]; then
70 ADB="$ADB -s $device"
71 fi
72
73 ASAN_RT="libclang_rt.asan-arm-android.so"
74
75 if [[ x$revert == xyes ]]; then
76 echo '>> Uninstalling ASan'
77 $ADB root
78 $ADB wait-for-device
79 $ADB remount
80 $ADB shell mv /system/bin/app_process.real /system/bin/app_process
81 $ADB shell rm /system/bin/asanwrapper
82 $ADB shell rm /system/lib/$ASAN_RT
83
84 echo '>> Restarting shell'
85 $ADB shell stop
86 $ADB shell start
87
88 echo '>> Done'
89 exit 0
90 fi
91
92 if [[ -d "$lib" ]]; then
93 ASAN_RT_PATH="$lib"
94 elif [[ -f "$lib" && "$lib" == *"$ASAN_RT" ]]; then
95 ASAN_RT_PATH=$(dirname "$lib")
96 elif [[ -f "$HERE/$ASAN_RT" ]]; then
97 ASAN_RT_PATH="$HERE"
98 elif [[ $(basename "$HERE") == "bin" ]]; then
99 # We could be in the toolchain's base directory.
100 # Consider ../lib and ../lib/clang/$VERSION/lib/linux.
101 P=$(ls "$HERE"/../lib/"$ASAN_RT" "$HERE"/../lib/clang/*/lib/linux/"$ASAN_RT" 2>/dev/null | sort | tail -1)
102 if [[ -n "$P" ]]; then
103 ASAN_RT_PATH="$(dirname "$P")"
104 fi
105 fi
106
107 if [[ -z "$ASAN_RT_PATH" || ! -f "$ASAN_RT_PATH/$ASAN_RT" ]]; then
108 echo "ASan runtime library not found"
109 exit 1
110 fi
111
112 TMPDIRBASE=$(mktemp -d)
113 TMPDIROLD="$TMPDIRBASE/old"
114 TMPDIR="$TMPDIRBASE/new"
115 mkdir "$TMPDIROLD"
116
117 echo '>> Remounting /system rw'
118 $ADB root
119 $ADB wait-for-device
120 $ADB remount
121
122 echo '>> Copying files from the device'
123 $ADB pull /system/bin/app_process "$TMPDIROLD"
124 $ADB pull /system/bin/app_process.real "$TMPDIROLD" || true
125 $ADB pull /system/bin/asanwrapper "$TMPDIROLD" || true
126 $ADB pull /system/lib/libclang_rt.asan-arm-android.so "$TMPDIROLD" || true
127 cp -r "$TMPDIROLD" "$TMPDIR"
128
129 if ! [[ -f "$TMPDIR/app_process" ]]; then
130 echo "app_process missing???"
131 exit 1
132 fi
133
134 if [[ -f "$TMPDIR/app_process.real" ]]; then
135 echo "app_process.real exists, updating the wrapper"
136 else
137 echo "app_process.real missing, new installation"
138 mv "$TMPDIR/app_process" "$TMPDIR/app_process.real"
139 fi
140
141 echo '>> Generating wrappers'
142
143 cp "$ASAN_RT_PATH/$ASAN_RT" "$TMPDIR/"
144
145 # FIXME: alloc_dealloc_mismatch=0 prevents a failure in libdvm startup,
146 # which may or may not be a real bug (probably not).
147 ASAN_OPTIONS=start_deactivated=1,alloc_dealloc_mismatch=0
148 if [[ x$extra_options != x ]] ; then
149 ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"
150 fi
151
152 # Zygote wrapper.
153 cat <<EOF >"$TMPDIR/app_process"
154 #!/system/bin/sh
155 ASAN_OPTIONS=$ASAN_OPTIONS \\
156 LD_PRELOAD=libclang_rt.asan-arm-android.so \\
157 exec /system/bin/app_process.real \$@
158
159 EOF
160
161 # General command-line tool wrapper (use for anything that's not started as
162 # zygote).
163 cat <<EOF >"$TMPDIR/asanwrapper"
164 #!/system/bin/sh
165 LD_PRELOAD=libclang_rt.asan-arm-android.so \\
166 exec \$@
167
168 EOF
169
170 if ! ( cd "$TMPDIRBASE" && diff -qr old/ new/ ) ; then
171 echo '>> Pushing files to the device'
172 $ADB push "$TMPDIR/$ASAN_RT" /system/lib/
173 $ADB push "$TMPDIR/app_process" /system/bin/app_process
174 $ADB push "$TMPDIR/app_process.real" /system/bin/app_process.real
175 $ADB push "$TMPDIR/asanwrapper" /system/bin/asanwrapper
176 $ADB shell chown root.shell \
177 /system/bin/app_process \
178 /system/bin/app_process.real \
179 /system/bin/asanwrapper
180 $ADB shell chmod 755 \
181 /system/bin/app_process \
182 /system/bin/app_process.real \
183 /system/bin/asanwrapper
184
185 echo '>> Restarting shell (asynchronous)'
186 $ADB shell stop
187 $ADB shell start
188
189 echo '>> Please wait until the device restarts'
190 else
191 echo '>> Device is up to date'
192 fi
193
194 rm -r "$TMPDIRBASE"
OLDNEW
« no previous file with comments | « build/android/pylib/valgrind_tools.py ('k') | tools/android/asan/third_party/README.chromium » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698