Index: runtime/vm/code_generator.cc |
=================================================================== |
--- runtime/vm/code_generator.cc (revision 32487) |
+++ runtime/vm/code_generator.cc (working copy) |
@@ -666,9 +666,14 @@ |
// target. |
ASSERT(target_code.EntryPoint() != |
CodePatcher::GetStaticCallTargetAt(caller_frame->pc(), caller_code)); |
- CodePatcher::PatchStaticCallAt(caller_frame->pc(), caller_code, |
- target_code.EntryPoint()); |
- caller_code.SetStaticCallTargetCodeAt(caller_frame->pc(), target_code); |
+ const Instructions& instrs = |
+ Instructions::Handle(caller_code.instructions()); |
+ { |
+ WritableInstructionsScope writable(instrs.EntryPoint(), instrs.size()); |
+ CodePatcher::PatchStaticCallAt(caller_frame->pc(), caller_code, |
+ target_code.EntryPoint()); |
+ caller_code.SetStaticCallTargetCodeAt(caller_frame->pc(), target_code); |
+ } |
if (FLAG_trace_patching) { |
OS::PrintErr("PatchStaticCall: patching from %#" Px " to '%s' %#" Px "\n", |
caller_frame->pc(), |
@@ -1363,9 +1368,13 @@ |
ASSERT(target_function.raw() == target_code.function()); |
const Code& current_target_code = Code::Handle(target_function.CurrentCode()); |
- CodePatcher::PatchStaticCallAt(frame->pc(), caller_code, |
- current_target_code.EntryPoint()); |
- caller_code.SetStaticCallTargetCodeAt(frame->pc(), current_target_code); |
+ const Instructions& instrs = Instructions::Handle(caller_code.instructions()); |
+ { |
+ WritableInstructionsScope writable(instrs.EntryPoint(), instrs.size()); |
+ CodePatcher::PatchStaticCallAt(frame->pc(), caller_code, |
+ current_target_code.EntryPoint()); |
+ caller_code.SetStaticCallTargetCodeAt(frame->pc(), current_target_code); |
+ } |
if (FLAG_trace_patching) { |
OS::PrintErr("FixCallersTarget: patching from %#" Px " to '%s' %#" Px "\n", |
frame->pc(), |
@@ -1405,7 +1414,12 @@ |
// is not a performance issue). |
uword lazy_deopt_jump = optimized_code.GetLazyDeoptPc(); |
ASSERT(lazy_deopt_jump != 0); |
- CodePatcher::InsertCallAt(pc, lazy_deopt_jump); |
+ const Instructions& instrs = |
+ Instructions::Handle(optimized_code.instructions()); |
+ { |
+ WritableInstructionsScope writable(instrs.EntryPoint(), instrs.size()); |
+ CodePatcher::InsertCallAt(pc, lazy_deopt_jump); |
+ } |
if (FLAG_trace_patching) { |
const String& name = String::Handle(function.name()); |
OS::PrintErr("InsertCallAt: %" Px " to %" Px " for %s\n", pc, |