%verify "executed" %verify "exception for null object (impossible in javac)" %verify "dvmUnlockObject fails" /* * Unlock an object. * * Exceptions that occur when unlocking a monitor need to appear as * if they happened at the following instruction. See the Dalvik * instruction spec. */ /* monitor-exit vAA */ GET_OPA(a2) # a2 <- AA EXPORT_PC() # before fetch: export the PC GET_VREG(a1, a2) # a1 <- vAA (object) # null object? beqz a1, 1f move a0, rSELF # a0 <- self JAL(dvmUnlockObject) # v0 <- success for unlock(self, obj) # failed? FETCH_ADVANCE_INST(1) # before throw: advance rPC, load rINST beqz v0, common_exceptionThrown # yes, exception is pending GET_INST_OPCODE(t0) # extract opcode from rINST GOTO_OPCODE(t0) # jump to next instruction 1: FETCH_ADVANCE_INST(1) # before throw: advance rPC, load rINST b common_errNullObject