1 #!/bin/bash 2 # 3 # Copyright (C) 2010 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 # The awk fun here tries to cull out all but the salient bits. The aim 18 # is to check to see that there are two invoke-static instructions, each 19 # followed directly by a move-result-object. 20 21 jasmin -d . blort.j 22 dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \ 23 blort.class | awk ' 24 25 BEGIN { 26 invokeAt = -1; 27 moveAt = -1; 28 invokeCount = 0; 29 failed = 0; 30 } 31 32 # Note: This has to be done before the test clause below. 33 /move-result-object/ { 34 moveAt = NR; 35 } 36 37 (invokeAt > 0) { 38 if (moveAt != (invokeAt + 1)) { 39 failed = 1; 40 } 41 invokeAt = -1; 42 moveAt = -1; 43 } 44 45 # Note: This has to be done after the test clause above. 46 /invoke-static/ { 47 invokeAt = NR; 48 invokeCount++; 49 } 50 51 END { 52 printf("total invokes: %d\n", invokeCount); 53 if (failed) { 54 exit 1; 55 } 56 } 57 ' 58 59 if [ "$?" = "1" ]; then 60 # The test failed. Be helpful and print the entire method body. 61 dx --debug --dex --dump-to=- --dump-method=blort.zorch --dump-width=200 \ 62 blort.class 63 fi 64