Index: runtime/vm/simulator_dbc.cc |
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc |
index ad072a92c21b8d2e6c44f372e08de303f4d718f6..d16a5a375869ea3c06faeb2d7826d0b627feec63 100644 |
--- a/runtime/vm/simulator_dbc.cc |
+++ b/runtime/vm/simulator_dbc.cc |
@@ -1086,28 +1086,20 @@ static DART_NOINLINE bool InvokeNativeWrapper(Thread* thread, |
goto DispatchAfterException; \ |
} while (0) |
-// Runtime call helpers: handle invocation and potential exception |
-// after return. The caller may have changed the return address on |
-// the stack. Handle this by updating the pc. |
+// Runtime call helpers: handle invocation and potential exception after return. |
#define INVOKE_RUNTIME(Func, Args) \ |
if (!InvokeRuntime(thread, this, Func, Args)) { \ |
HANDLE_EXCEPTION; \ |
- } else { \ |
- pc = reinterpret_cast<uint32_t*>(fp_[kSavedCallerPcSlotFromFp]); \ |
} |
#define INVOKE_NATIVE(Func, Args) \ |
if (!InvokeNative(thread, this, Func, &Args)) { \ |
HANDLE_EXCEPTION; \ |
- } else { \ |
- pc = reinterpret_cast<uint32_t*>(fp_[kSavedCallerPcSlotFromFp]); \ |
} |
#define INVOKE_NATIVE_WRAPPER(Func, Args) \ |
if (!InvokeNativeWrapper(thread, this, Func, &Args)) { \ |
HANDLE_EXCEPTION; \ |
- } else { \ |
- pc = reinterpret_cast<uint32_t*>(fp_[kSavedCallerPcSlotFromFp]); \ |
} |
#define LOAD_CONSTANT(index) (pp->data()[(index)].raw_obj_) |
@@ -1132,8 +1124,6 @@ DART_FORCE_INLINE bool Simulator::Deoptimize(Thread* thread, |
EnterSyntheticFrame(FP, SP, *pc - (is_lazy ? 1 : 0)); |
const intptr_t frame_size_in_bytes = |
DLRT_DeoptimizeCopyFrame(reinterpret_cast<uword>(*FP), is_lazy ? 1 : 0); |
- // Copy frame updates the caller pc (which is our pc). |
- *pc = reinterpret_cast<uint32_t*>((*FP)[kSavedCallerPcSlotFromFp]); |
LeaveSyntheticFrame(FP, SP); |
*SP = *FP + (frame_size_in_bytes / kWordSize); |
@@ -1562,7 +1552,7 @@ RawObject* Simulator::Call(const Code& code, |
SP[1] = null_value; |
Exit(thread, FP, SP + 2, pc); |
NativeArguments args(thread, 0, NULL, SP + 1); |
- INVOKE_RUNTIME(DRT_BreakpointRuntimeHandler, args); |
+ INVOKE_RUNTIME(DRT_BreakpointRuntimeHandler, args) |
DISPATCH_OP(original_bc); |
} |
#else |
@@ -2666,18 +2656,8 @@ RawObject* Simulator::Call(const Code& code, |
return result; |
} |
- // If we have a pending lazy deopt then the caller's pc is stored |
- // in the isolate. |
- uint32_t* caller_pc = pc; |
- if ((reinterpret_cast<uword>(pc) == |
- StubCode::DeoptimizeLazyFromReturn_entry()->EntryPoint())) { |
- caller_pc = |
- reinterpret_cast<uint32_t*>(thread->isolate()->FindPendingDeopt( |
- reinterpret_cast<uword>(SavedCallerFP(FP)))); |
- } |
- |
// Look at the caller to determine how many arguments to pop. |
- const uint8_t argc = Bytecode::DecodeArgc(caller_pc[-1]); |
+ const uint8_t argc = Bytecode::DecodeArgc(pc[-1]); |
// Restore SP, FP and PP. Push result and dispatch. |
SP = FrameArguments(FP, argc); |