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