1 /* 2 * To support deadlock prediction, this version of MONITOR_ENTER 3 * will always call the heavyweight dvmLockObject, check for an 4 * exception and then bail out to the interpreter. 5 * 6 * On entry: 7 * r0 - self pointer 8 * r1 - the object (which has already been null-checked by the caller 9 * r4 - the Dalvik PC of the following instruction. 10 * 11 */ 12 ldr r2, .LdvmLockObject 13 mov r3, #0 @ Record that we're not returning 14 str r3, [r0, #offThread_inJitCodeCache] 15 blx r2 @ dvmLockObject(self, obj) 16 @ test for exception 17 ldr r1, [rSELF, #offThread_exception] 18 cmp r1, #0 19 beq 1f 20 ldr r2, .LhandleException 21 sub r0, r4, #2 @ roll dPC back to this monitor instruction 22 bx r2 23 1: 24 @ Bail to interpreter - no chain [note - r4 still contains rPC] 25 #if defined(WITH_JIT_TUNING) 26 mov r0, #kHeavyweightMonitor 27 #endif 28 ldr pc, .LdvmJitToInterpNoChain 29