Index: runtime/vm/flow_graph_compiler_arm64.cc |
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc |
index 405d974883c0457b4cbcda341bd94c98ee663ce4..ac4d66df0b5f5754694a2d253324c1a80b11b65f 100644 |
--- a/runtime/vm/flow_graph_compiler_arm64.cc |
+++ b/runtime/vm/flow_graph_compiler_arm64.cc |
@@ -1106,6 +1106,21 @@ void FlowGraphCompiler::CompileGraph() { |
__ brk(0); |
ASSERT(assembler()->constant_pool_allowed()); |
GenerateDeferredCode(); |
+ |
+ BeginCodeSourceRange(); |
+ if (is_optimizing() && !FLAG_precompiled_mode) { |
+ // Leave enough space for patching in case of lazy deoptimization. |
+ for (intptr_t i = 0; |
+ i < CallPattern::kDeoptCallLengthInInstructions; |
+ ++i) { |
+ __ orr(R0, ZR, Operand(R0)); // nop |
+ } |
+ lazy_deopt_return_pc_offset_ = assembler()->CodeSize(); |
+ __ BranchPatchable(*StubCode::DeoptimizeLazyFromReturn_entry()); |
+ lazy_deopt_throw_pc_offset_ = assembler()->CodeSize(); |
+ __ BranchPatchable(*StubCode::DeoptimizeLazyFromThrow_entry()); |
+ } |
+ EndCodeSourceRange(TokenPosition::kDartCodeEpilogue); |
} |