1 /* 2 * Call out to the runtime to lock an object. Because this thread 3 * may have been suspended in THREAD_MONITOR state and the Jit's 4 * translation cache subsequently cleared, we cannot return directly. 5 * Instead, unconditionally transition to the interpreter to resume. 6 * 7 * On entry: 8 * r0 - self pointer 9 * r1 - the object (which has already been null-checked by the caller 10 * r4 - the Dalvik PC of the following instruction. 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 ldr r2, .LdvmJitToInterpNoChain 17 @ Bail to interpreter - no chain [note - r4 still contains rPC] 18 #if defined(WITH_JIT_TUNING) 19 mov r0, #kHeavyweightMonitor 20 #endif 21 bx r2 22