| Index: runtime/vm/stack_frame.h
|
| diff --git a/runtime/vm/stack_frame.h b/runtime/vm/stack_frame.h
|
| index 268ca4a9998819930ed8b30b3cb92ef2bab75a7e..69adea4bfbd5119a24e157e053595aea460afbde 100644
|
| --- a/runtime/vm/stack_frame.h
|
| +++ b/runtime/vm/stack_frame.h
|
| @@ -53,6 +53,7 @@ class StackFrame : public ValueObject {
|
|
|
| void set_pc(uword value) {
|
| *reinterpret_cast<uword*>(sp() + (kSavedPcSlotFromSp * kWordSize)) = value;
|
| + pc_ = value;
|
| }
|
|
|
| void set_pc_marker(RawCode* code) {
|
| @@ -110,8 +111,21 @@ class StackFrame : public ValueObject {
|
| }
|
|
|
| uword GetCallerPc() const {
|
| - return *(reinterpret_cast<uword*>(
|
| + uword raw_pc = *(reinterpret_cast<uword*>(
|
| fp() + (kSavedCallerPcSlotFromFp * kWordSize)));
|
| + ASSERT(raw_pc != StubCode::DeoptimizeLazyFromThrow_entry()->EntryPoint());
|
| + if (raw_pc == StubCode::DeoptimizeLazyFromReturn_entry()->EntryPoint()) {
|
| + uword fp = GetCallerFp();
|
| + MallocGrowableArray<PendingLazyDeopt>* pending_deopts =
|
| + isolate()->pending_deopts();
|
| + for (intptr_t i = 0; i < pending_deopts->length(); i++) {
|
| + if ((*pending_deopts)[i].fp() == fp) {
|
| + return (*pending_deopts)[i].pc();
|
| + }
|
| + }
|
| + UNREACHABLE();
|
| + }
|
| + return raw_pc;
|
| }
|
|
|
| uword fp_;
|
|
|