Index: runtime/vm/simulator_dbc.cc |
diff --git a/runtime/vm/simulator_dbc.cc b/runtime/vm/simulator_dbc.cc |
index 07df1b074296c16e5bb81ed3a94841983032ba97..81a4f32cdb3408716baa34d610af5ad7cf16429a 100644 |
--- a/runtime/vm/simulator_dbc.cc |
+++ b/runtime/vm/simulator_dbc.cc |
@@ -553,6 +553,7 @@ DART_FORCE_INLINE void Simulator::Invoke(Thread* thread, |
callee_fp[kSavedCallerFpSlotFromFp] = reinterpret_cast<RawObject*>(*FP); |
*pp = code->ptr()->object_pool_->ptr(); |
*pc = reinterpret_cast<uint32_t*>(code->ptr()->entry_point_); |
+ pc_ = reinterpret_cast<uword>(*pc); // For the profiler. |
*FP = callee_fp; |
*SP = *FP - 1; |
} |
@@ -705,6 +706,7 @@ static DART_NOINLINE bool InvokeRuntime( |
thread->set_vm_tag(reinterpret_cast<uword>(drt)); |
drt(args); |
thread->set_vm_tag(VMTag::kDartTagId); |
+ thread->set_top_exit_frame_info(0); |
return true; |
} else { |
return false; |
@@ -722,6 +724,7 @@ static DART_NOINLINE bool InvokeNative( |
thread->set_vm_tag(reinterpret_cast<uword>(f)); |
f(args); |
thread->set_vm_tag(VMTag::kDartTagId); |
+ thread->set_top_exit_frame_info(0); |
return true; |
} else { |
return false; |
@@ -740,6 +743,7 @@ static DART_NOINLINE bool InvokeNativeWrapper( |
NativeEntry::NativeCallWrapper(reinterpret_cast<Dart_NativeArguments>(args), |
f); |
thread->set_vm_tag(VMTag::kDartTagId); |
+ thread->set_top_exit_frame_info(0); |
return true; |
} else { |
return false; |
@@ -941,6 +945,7 @@ RawObject* Simulator::Call(const Code& code, |
// Save outer top_exit_frame_info. |
fp_[0] = reinterpret_cast<RawObject*>(thread->top_exit_frame_info()); |
+ thread->set_top_exit_frame_info(0); |
// Copy arguments and setup the Dart frame. |
const intptr_t argc = arguments.Length(); |
@@ -959,6 +964,7 @@ RawObject* Simulator::Call(const Code& code, |
// Ready to start executing bytecode. Load entry point and corresponding |
// object pool. |
pc = reinterpret_cast<uint32_t*>(code.raw()->ptr()->entry_point_); |
+ pc_ = reinterpret_cast<uword>(pc); // For the profiler. |
pp = code.object_pool()->ptr(); |
// Cache some frequently used values in the frame. |
@@ -1180,6 +1186,7 @@ RawObject* Simulator::Call(const Code& code, |
SimulatorHelpers::SetFrameCode(FP, code); |
pp = code->ptr()->object_pool_->ptr(); |
pc = reinterpret_cast<uint32_t*>(code->ptr()->entry_point_); |
+ pc_ = reinterpret_cast<uword>(pc); // For the profiler. |
} |
DISPATCH(); |
} |
@@ -1209,6 +1216,7 @@ RawObject* Simulator::Call(const Code& code, |
SimulatorHelpers::SetFrameCode(FP, code); |
pp = code->ptr()->object_pool_->ptr(); |
pc = reinterpret_cast<uint32_t*>(code->ptr()->entry_point_); |
+ pc_ = reinterpret_cast<uword>(pc); // For the profiler. |
} |
} |
DISPATCH(); |
@@ -2146,6 +2154,7 @@ RawObject* Simulator::Call(const Code& code, |
ReturnImpl: |
// Restore caller PC. |
pc = SavedCallerPC(FP); |
+ pc_ = reinterpret_cast<uword>(pc); // For the profiler. |
// Check if it is a fake PC marking the entry frame. |
if ((reinterpret_cast<uword>(pc) & 2) != 0) { |
@@ -3050,6 +3059,7 @@ RawObject* Simulator::Call(const Code& code, |
// Restore caller PC. |
pc = SavedCallerPC(FP); |
+ pc_ = reinterpret_cast<uword>(pc); // For the profiler. |
// Check if it is a fake PC marking the entry frame. |
ASSERT((reinterpret_cast<uword>(pc) & 2) == 0); |