| Index: runtime/vm/stub_code_mips.cc
 | 
| diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
 | 
| index 137573c1d4607f329c72ac2de33f00ad2ca48d0a..44498fc03bcd786d2f5d9fa326d2bf057e9e1e8f 100644
 | 
| --- a/runtime/vm/stub_code_mips.cc
 | 
| +++ b/runtime/vm/stub_code_mips.cc
 | 
| @@ -207,7 +207,7 @@ void StubCode::GenerateCallNativeCFunctionStub(Assembler* assembler) {
 | 
|    __ LoadImmediate(T9, entry);
 | 
|    __ jalr(T9);
 | 
|  #else
 | 
| -  __ BranchLink(&NativeEntry::NativeCallWrapperLabel());
 | 
| +  __ BranchLink(&NativeEntry::NativeCallWrapperLabel(), kNotPatchable);
 | 
|  #endif
 | 
|    __ Comment("CallNativeCFunctionStub return");
 | 
|  
 | 
| @@ -460,6 +460,8 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
 | 
|    __ sw(PP, Address(SP, kPushedRegistersSize - 4 * kWordSize));
 | 
|    __ addiu(FP, SP, Immediate(kPushedRegistersSize - 3 * kWordSize));
 | 
|  
 | 
| +  __ LoadPoolPointer();
 | 
| +
 | 
|    // The code in this frame may not cause GC. kDeoptimizeCopyFrameRuntimeEntry
 | 
|    // and kDeoptimizeFillFrameRuntimeEntry are leaf runtime calls.
 | 
|    const intptr_t saved_result_slot_from_fp =
 | 
| @@ -490,20 +492,12 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
 | 
|      __ lw(T1, Address(FP, saved_result_slot_from_fp * kWordSize));
 | 
|    }
 | 
|  
 | 
| -  __ addiu(SP, FP, Immediate(-kWordSize));
 | 
| -  __ lw(RA, Address(SP, 2 * kWordSize));
 | 
| -  __ lw(FP, Address(SP, 1 * kWordSize));
 | 
| -  __ lw(PP, Address(SP, 0 * kWordSize));
 | 
| +  __ LeaveDartFrame();
 | 
|    __ subu(SP, FP, V0);
 | 
|  
 | 
|    // DeoptimizeFillFrame expects a Dart frame, i.e. EnterDartFrame(0), but there
 | 
|    // is no need to set the correct PC marker or load PP, since they get patched.
 | 
| -  __ addiu(SP, SP, Immediate(-4 * kWordSize));
 | 
| -  __ sw(ZR, Address(SP, 3 * kWordSize));
 | 
| -  __ sw(RA, Address(SP, 2 * kWordSize));
 | 
| -  __ sw(FP, Address(SP, 1 * kWordSize));
 | 
| -  __ sw(PP, Address(SP, 0 * kWordSize));
 | 
| -  __ addiu(FP, SP, Immediate(kWordSize));
 | 
| +  __ EnterStubFrame();
 | 
|  
 | 
|    __ mov(A0, FP);  // Get last FP address.
 | 
|    if (preserve_result) {
 | 
| @@ -516,11 +510,7 @@ static void GenerateDeoptimizationSequence(Assembler* assembler,
 | 
|      __ lw(T1, Address(FP, kFirstLocalSlotFromFp * kWordSize));
 | 
|    }
 | 
|    // Code above cannot cause GC.
 | 
| -  __ addiu(SP, FP, Immediate(-kWordSize));
 | 
| -  __ lw(RA, Address(SP, 2 * kWordSize));
 | 
| -  __ lw(FP, Address(SP, 1 * kWordSize));
 | 
| -  __ lw(PP, Address(SP, 0 * kWordSize));
 | 
| -  __ addiu(SP, SP, Immediate(4 * kWordSize));
 | 
| +  __ LeaveStubFrame();
 | 
|  
 | 
|    // Frame is fully rewritten at this point and it is safe to perform a GC.
 | 
|    // Materialize any objects that were deferred by FillFrame because they
 | 
| 
 |