blob: 2b6a5a17ecdce03c894ebebf7b833e5dd7a9a5db [file] [log] [blame]
Andreas Gampe54fc26c2014-09-04 21:47:42 -07001#!/bin/sh
2# Copyright (C) 2014 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16#
17# Symbolize oat files from the dalvik cache of a device.
18#
19# By default, pulls everything from the dalvik cache. A simple yes/no/quit prompt for each file can
20# be requested by giving "--interactive" as a parameter.
21
22INTERACTIVE="no"
23if [ "x$1" = "x--interactive" ] ; then
24 INTERACTIVE="yes"
Andreas Gampee0021c52015-07-09 14:39:56 -070025 shift
Andreas Gampe54fc26c2014-09-04 21:47:42 -070026fi
27
28# Pull the file from the device and symbolize it.
leon.wang1abd3ec2020-03-26 18:38:30 +080029one() {
Andreas Gampe54fc26c2014-09-04 21:47:42 -070030 echo $1 $2
31 if [ "x$INTERACTIVE" = "xyes" ] ; then
32 echo -n "What to do? [Y/n/q] "
33 read -e input
34 if [ "x$input" = "xn" ] ; then
35 return
36 fi
37 if [ "x$input" = "xq" ] ; then
38 exit 0
39 fi
40 fi
Zheng Xu468bcf62015-04-21 17:35:25 +080041 adb pull $1/$2 /tmp || exit 1
leon.wang1abd3ec2020-03-26 18:38:30 +080042 # pull vdex file for oatdump
43 vdex=${2%.*}.vdex
44 adb pull $1/$vdex /tmp/ 2>/dev/null
Zheng Xu468bcf62015-04-21 17:35:25 +080045 mkdir -p $OUT/symbols/$1
46 oatdump --symbolize=/tmp/$2 --output=$OUT/symbols/$1/$2
Andreas Gampe54fc26c2014-09-04 21:47:42 -070047}
48
Zheng Xu468bcf62015-04-21 17:35:25 +080049# adb shell find seems to output in DOS format (CRLF), which messes up scripting
leon.wang1abd3ec2020-03-26 18:38:30 +080050adbshellstrip() {
Zheng Xu468bcf62015-04-21 17:35:25 +080051 adb shell $@ | sed 's/\r$//'
Andreas Gampe54fc26c2014-09-04 21:47:42 -070052}
53
Zheng Xu468bcf62015-04-21 17:35:25 +080054# Search in all of /data on device.
leon.wang1abd3ec2020-03-26 18:38:30 +080055all() {
Zheng Xu468bcf62015-04-21 17:35:25 +080056 FILES=$(adbshellstrip find /data -name "'*.oat'" -o -name "'*.dex'" -o -name "'*.odex'")
57 for FILE in $FILES ; do
58 DIR=$(dirname $FILE)
59 NAME=$(basename $FILE)
60 one $DIR $NAME
Andreas Gampe54fc26c2014-09-04 21:47:42 -070061 done
62}
63
Andreas Gampee0021c52015-07-09 14:39:56 -070064if [ "x$1" = "x" ] ; then
65 # No further arguments, iterate over all oat files on device.
66 all
67else
68 # Take the parameters as a list of paths on device.
69 while (($#)); do
70 DIR=$(dirname $1)
71 NAME=$(basename $1)
72 one $DIR $NAME
73 shift
74 done
75fi