Home | History | Annotate | Download | only in tools
      1 #!/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 
     22 INTERACTIVE="no"
     23 if [ "x$1" = "x--interactive" ] ; then
     24   INTERACTIVE="yes"
     25   shift
     26 fi
     27 
     28 # Pull the file from the device and symbolize it.
     29 function one() {
     30   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
     41   adb pull $1/$2 /tmp || exit 1
     42   mkdir -p $OUT/symbols/$1
     43   oatdump --symbolize=/tmp/$2 --output=$OUT/symbols/$1/$2
     44 }
     45 
     46 # adb shell find seems to output in DOS format (CRLF), which messes up scripting
     47 function adbshellstrip() {
     48   adb shell $@ | sed 's/\r$//'
     49 }
     50 
     51 # Search in all of /data on device.
     52 function all() {
     53   FILES=$(adbshellstrip find /data -name "'*.oat'" -o -name "'*.dex'" -o -name "'*.odex'")
     54   for FILE in $FILES ; do
     55     DIR=$(dirname $FILE)
     56     NAME=$(basename $FILE)
     57     one $DIR $NAME
     58   done
     59 }
     60 
     61 if [ "x$1" = "x" ] ; then
     62   # No further arguments, iterate over all oat files on device.
     63   all
     64 else
     65   # Take the parameters as a list of paths on device.
     66   while (($#)); do
     67     DIR=$(dirname $1)
     68     NAME=$(basename $1)
     69     one $DIR $NAME
     70     shift
     71   done
     72 fi
     73