1 %verify "executed" 2 %verify "exception for null object (impossible in javac)" 3 %verify "dvmUnlockObject fails" 4 /* 5 * Unlock an object. 6 * 7 * Exceptions that occur when unlocking a monitor need to appear as 8 * if they happened at the following instruction. See the Dalvik 9 * instruction spec. 10 */ 11 /* monitor-exit vAA */ 12 GET_VREG_R %eax rINST 13 movl rSELF,%ecx 14 EXPORT_PC 15 testl %eax,%eax # null object? 16 je .L${opcode}_errNullObject # go if so 17 movl %eax,OUT_ARG1(%esp) 18 movl %ecx,OUT_ARG0(%esp) 19 SPILL(rIBASE) 20 call dvmUnlockObject # unlock(self,obj) 21 UNSPILL(rIBASE) 22 FETCH_INST_OPCODE 1 %ecx 23 testl %eax,%eax # success? 24 ADVANCE_PC 1 25 je common_exceptionThrown # no, exception pending 26 GOTO_NEXT_R %ecx 27 .L${opcode}_errNullObject: 28 ADVANCE_PC 1 # advance before throw 29 jmp common_errNullObject 30