#!/bin/bash # # Copyright (C) 2008 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. BASEDIR=`pwd` CLASSFOLDERS='out/classes_cfh out/classes_jasmin out/classes_javac' function findClassFile() { i=0; for path in $1; do if [ -f ${path}/$2 ]; then CLASSFOLDER=$path return fi done } function mapOpcode() { MAPPED_OPCODE="" if [ -z $1 ]; then MAPPED_OPCODE="" return; fi line=`grep -e "^$1 " ${BASEDIR}/data/opcode_mapping` if [ $? -ne 0 ]; then MAPPED_OPCODE="" else echo $line MAPPED_OPCODE=`echo -n $line | cut -d" " -f2` fi } while read -u 3 myline; do jpackageclass=`echo $myline | cut -d";" -f1` # e.g dxc.junit.verify.t482_9.Main_testVFE2 jpackageclassfile=`echo $jpackageclass | sed -e 's/\./\//g;s/$/.java/'` echo $jpackageclassfile jtestclass=`echo $myline | cut -d";" -f2` # e.g dxc.junit.verity.t482_9.jm.T_t482_9_1 jtestclassfile=`echo $jtestclass | sed -e 's/\./\//g;s/$/.class/'` jtestsourcefile=`echo $jtestclass | sed -e 's/\./\//g;s/$/.java/'` # echo $jtestclassfile rm -rf out/tmp mkdir -p out/tmp findClassFile "${CLASSFOLDERS}" $jtestclassfile cd ${CLASSFOLDER} cp -P --parent $jtestclassfile ${BASEDIR}/out/tmp/ cd ${BASEDIR} #findClassFile "${CLASSFOLDERS}" $jpackageclassfile #cd ${CLASSFOLDER} #cp -P --parents $jpackageclassfile ${BASEDIR}/out/tmp/ #cd ${BASEDIR} # echo ${CLASSFOLDER}/${jtestclassfile} OPCODE=`echo $jtestclass | sed -e 's/.*T_\(.*\)_[0-9]\+[_]*[a-z]*/\1/'` mapOpcode ${OPCODE} # echo ${OPCODE} " - " ${MAPPED_OPCODE} if [ -z ${MAPPED_OPCODE} ]; then continue fi for subcode in `echo $MAPPED_OPCODE | cut -d";" -f1,2 --output-delimiter=" "`; do SCRIPT="s#out/classes_[^/]*/dxc/\(.*\)/${OPCODE}/jm/T_${OPCODE}\(.*\)\.class#src/dot/\1/${subcode}/d/T_${subcode}\2.d#" FILEDEST=`echo ${CLASSFOLDER}/${jtestclassfile} | sed -e $SCRIPT` echo ${FILEDEST} # SCRIPT="s#out/classes_[^/]*/dxc/\(.*\)${OPCODE}/Main_\(.*\)\.class#src/dot/\1/${subcode}/Main_\2.d#" # FILEDEST=`echo ${CLASSFOLDER}/${jpackageclassfile} | sed -e $SCRIPT` # echo ${FILEDEST} cd out/tmp OUT=`dx --dex --no-optimize --positions=lines --output="/tmp/dxclasses.jar" ${jtestclassfile} 2>&1` if [ $? -eq 0 ]; then cd ${BASEDIR} mkdir -p `dirname ${FILEDEST}` dexdump -g /tmp/dxclasses.jar > ${FILEDEST} sed -i -e 's/dxc\([\.|\/]\)junit/dot\1junit/' ${FILEDEST} SCRIPT="s/${OPCODE}\([\.|\/]\)jm\([\.|\/]\)/${subcode}\1d\2/g" sed -i -e ${SCRIPT} ${FILEDEST} SCRIPT="s/T_${OPCODE}/T_${subcode}/g" sed -i -e ${SCRIPT} ${FILEDEST} SCRIPT="s#dxc/\(.*\)/${OPCODE}/\(.*\)#src/dot/\1/${subcode}/\2#" jpackagedestfile=`echo ${jpackageclassfile} | sed -e $SCRIPT` cp src/${jpackageclassfile} ${jpackagedestfile} sed -i -e 's/dxc\([\.|\/]\)junit/dot\1junit/' ${jpackagedestfile} SCRIPT="s/${OPCODE}\([\.|\/]\)jm\([\.|\/]\)/${subcode}\1d\2/g" sed -i -e ${SCRIPT} ${jpackagedestfile} SCRIPT="s/T_${OPCODE}/T_${subcode}/g" sed -i -e ${SCRIPT} ${jpackagedestfile} sed -i -e "s/\(package .*\)${OPCODE}/\1${subcode}/" ${jpackagedestfile} SCRIPT="s#dxc/\(.*\)/${OPCODE}/jm/\(.*\)${OPCODE}\(.*\).class#src/dot/\1/${subcode}/d/\2${subcode}\3.java#" jpackagedestfile=`echo ${jtestclassfile} | sed -e $SCRIPT` cp src/${jtestsourcefile} ${jpackagedestfile} sed -i -e 's/dxc\([\.|\/]\)junit/dot\1junit/' ${jpackagedestfile} SCRIPT="s/${OPCODE}\([\.|\/]\)jm\([\.|\/|;]\)/${subcode}\1d\2/g" sed -i -e ${SCRIPT} ${jpackagedestfile} SCRIPT="s/T_${OPCODE}/T_${subcode}/g" sed -i -e ${SCRIPT} ${jpackagedestfile} sed -i -e "s/\(package .*\)${OPCODE}/\1${subcode}/" ${jpackagedestfile} srcdir=`dirname ${jtestsourcefile}` for srcfile in `find src/${srcdir} -maxdepth 1 -type f ! -name "T_*.java" -a -name "*.java"`; do echo $srcfile SCRIPT="s#dxc/\(.*\)/${OPCODE}/jm/\(.*\).java#dot/\1/${subcode}/d/\2.java#" jpackagedestfile=`echo ${srcfile} | sed -e $SCRIPT` cp ${srcfile} ${jpackagedestfile} sed -i -e 's/dxc\([\.|\/]\)junit/dot\1junit/' ${jpackagedestfile} SCRIPT="s/${OPCODE}\([\.|\/]\)jm\([\.|\/|;]\)/${subcode}\1d\2/g" sed -i -e ${SCRIPT} ${jpackagedestfile} SCRIPT="s/T_${OPCODE}/T_${subcode}/g" sed -i -e ${SCRIPT} ${jpackagedestfile} sed -i -e "s/\(package .*\)${OPCODE}/\1${subcode}/" ${jpackagedestfile} done srcdir=`dirname ${jpackageclassfile}` for srcfile in `find src/${srcdir} -maxdepth 1 -type f ! -name "Main_*.java" -a ! -name "Test_*.java" -a -name "*.java"`; do echo $srcfile SCRIPT="s#dxc/\(.*\)/${OPCODE}/\(.*\)#dot/\1/${subcode}/\2#" jpackagedestfile=`echo ${srcfile} | sed -e $SCRIPT` cp -v ${srcfile} ${jpackagedestfile} done else echo "--- not dexable" fi cd ${BASEDIR} done done 3<$BASEDIR/data/scriptdata