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

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

Issue 138153003: Switch to the "new" way of ASan deployment on Android devices. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 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 | Annotate | Revision Log
« no previous file with comments | « build/android/pylib/valgrind_tools.py ('k') | tools/android/asan/asanwrapper.sh » ('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 # Copyright (c) 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 # Prepare Android device to run ASan application.
7
8
9 HERE="$(cd "$(dirname "$0")" && pwd)"
10
11 revert=no
12 extra_options=
13 device=
14
15 function usage {
16 echo "usage: $0 [--revert] [--device device-id]"
17 echo " --revert: Uninstall ASan from the device."
18 echo " --extra_options: Extra ASAN_OPTIONS."
19 echo " --device: Install to the given device. Use 'adb devices' to find"
20 echo " device-id."
21 echo
22 exit 1
23 }
24
25 while [[ $# > 0 ]]; do
26 case $1 in
27 --revert)
28 revert=yes
29 ;;
30 --extra-options)
31 shift
32 if [[ $# == 0 ]]; then
33 echo "--extra-options requires an argument."
34 exit 1
35 fi
36 extra_options="$1"
37 ;;
38 --device)
39 shift
40 if [[ $# == 0 ]]; then
41 echo "--device requires an argument."
42 exit 1
43 fi
44 device="$1"
45 ;;
46 *)
47 usage
48 ;;
49 esac
50 shift
51 done
52
53 ADB="adb"
54 if [[ x$device != x ]]; then
55 ADB="adb -s $device"
56 fi
57
58 ASAN_RT_PATH="$HERE"
59 ASAN_RT="libclang_rt.asan-arm-android.so"
60
61 if [[ x$revert == xyes ]]; then
62 echo '>> Uninstalling ASan'
63 $ADB remount
64 $ADB shell mv /system/bin/app_process.real /system/bin/app_process
65 $ADB shell rm /system/bin/asanwrapper
66 $ADB shell rm /system/lib/$ASAN_RT
67
68 echo '>> Restarting shell'
69 $ADB shell stop
70 $ADB shell start
71
72 echo '>> Done'
73 exit 0
74 fi
75
76 if ! [[ -f "$ASAN_RT_PATH/$ASAN_RT" ]]; then
77 echo "ASan runtime library not found at $ASAN_RT"
78 exit 1
79 fi
80
81 TMPDIRBASE=$(mktemp -d)
82 echo $TMPDIRBASE
83 TMPDIROLD="$TMPDIRBASE/old"
84 TMPDIR="$TMPDIRBASE/new"
85 mkdir "$TMPDIROLD"
86
87 echo '>> Remounting /system rw'
88 $ADB remount
89
90 echo '>> Copying files from the device'
91 $ADB pull /system/bin/app_process "$TMPDIROLD"
92 $ADB pull /system/bin/app_process.real "$TMPDIROLD" || true
93 $ADB pull /system/bin/asanwrapper "$TMPDIROLD" || true
94 $ADB pull /system/lib/libclang_rt.asan-arm-android.so "$TMPDIROLD" || true
95 cp -r "$TMPDIROLD" "$TMPDIR"
96
97 if ! [[ -f "$TMPDIR/app_process" ]]; then
98 echo "app_process missing???"
99 exit 1
100 fi
101
102 if [[ -f "$TMPDIR/app_process.real" ]]; then
103 echo "app_process.real exists, updating the wrapper"
104 else
105 echo "app_process.real missing, new installation"
106 mv "$TMPDIR/app_process" "$TMPDIR/app_process.real"
107 fi
108
109 echo '>> Generating wrappers'
110
111 cp "$ASAN_RT_PATH/$ASAN_RT" "$TMPDIR/"
112
113 # FIXME: alloc_dealloc_mismatch=0 prevents a failure in libdvm startup,
114 # which may or may not be a real bug (probably not).
115 ASAN_OPTIONS=start_deactivated=1,alloc_dealloc_mismatch=0
116 if [[ x$extra_options != x ]] ; then
117 ASAN_OPTIONS="$ASAN_OPTIONS,$extra_options"
118 fi
119
120 # Zygote wrapper.
121 cat <<EOF >"$TMPDIR/app_process"
122 #!/system/bin/sh
123 ASAN_OPTIONS=$ASAN_OPTIONS \\
124 LD_PRELOAD=libclang_rt.asan-arm-android.so \\
125 exec /system/bin/app_process.real \$@
126
127 EOF
128
129 # General command-line tool wrapper (use for anything that's not started as
130 # zygote).
131 cat <<EOF >"$TMPDIR/asanwrapper"
132 #!/system/bin/sh
133 LD_PRELOAD=libclang_rt.asan-arm-android.so \\
134 exec \$@
135
136 EOF
137
138 if ! ( cd "$TMPDIRBASE" && diff -qr old/ new/ ) ; then
139 echo '>> Pushing files to the device'
140 $ADB push "$TMPDIR/$ASAN_RT" /system/lib/
141 $ADB push "$TMPDIR/app_process" /system/bin/app_process
142 $ADB push "$TMPDIR/app_process.real" /system/bin/app_process.real
143 $ADB push "$TMPDIR/asanwrapper" /system/bin/asanwrapper
144 $ADB shell chown root.shell \
145 /system/bin/app_process \
146 /system/bin/app_process.real \
147 /system/bin/asanwrapper
148 $ADB shell chmod 755 \
149 /system/bin/app_process \
150 /system/bin/app_process.real \
151 /system/bin/asanwrapper
152
153 echo '>> Restarting shell (asynchronous)'
154 $ADB shell stop
155 $ADB shell start
156
157 echo '>> Please wait until the device restarts'
158 else
159 echo '>> Device is up to date'
160 fi
161
162 rm -r "$TMPDIRBASE"
OLDNEW
« no previous file with comments | « build/android/pylib/valgrind_tools.py ('k') | tools/android/asan/asanwrapper.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698