Index: runtime/vm/debugger_ia32.cc |
diff --git a/runtime/vm/debugger_ia32.cc b/runtime/vm/debugger_ia32.cc |
index cbc9c0dae188c811921827120c8ee0e9f9c64773..27cd6b5dac8ce779c290de47c96d098da44f3f68 100644 |
--- a/runtime/vm/debugger_ia32.cc |
+++ b/runtime/vm/debugger_ia32.cc |
@@ -44,20 +44,24 @@ uword CodeBreakpoint::OrigStubAddress() const { |
void CodeBreakpoint::PatchCode() { |
ASSERT(!is_enabled_); |
- switch (breakpoint_kind_) { |
- case PcDescriptors::kIcCall: |
- case PcDescriptors::kUnoptStaticCall: |
- case PcDescriptors::kRuntimeCall: |
- case PcDescriptors::kClosureCall: |
- case PcDescriptors::kReturn: { |
- const Code& code = Code::Handle(code_); |
- saved_value_ = CodePatcher::GetStaticCallTargetAt(pc_, code); |
- CodePatcher::PatchStaticCallAt(pc_, code, |
- StubCode::BreakpointRuntimeEntryPoint()); |
- break; |
+ const Code& code = Code::Handle(code_); |
+ const Instructions& instrs = Instructions::Handle(code.instructions()); |
+ { |
+ WritableInstructionsScope writable(instrs.EntryPoint(), instrs.size()); |
+ switch (breakpoint_kind_) { |
+ case PcDescriptors::kIcCall: |
+ case PcDescriptors::kUnoptStaticCall: |
+ case PcDescriptors::kRuntimeCall: |
+ case PcDescriptors::kClosureCall: |
+ case PcDescriptors::kReturn: { |
+ saved_value_ = CodePatcher::GetStaticCallTargetAt(pc_, code); |
+ CodePatcher::PatchStaticCallAt(pc_, code, |
+ StubCode::BreakpointRuntimeEntryPoint()); |
+ break; |
+ } |
+ default: |
+ UNREACHABLE(); |
} |
- default: |
- UNREACHABLE(); |
} |
is_enabled_ = true; |
} |
@@ -65,18 +69,20 @@ void CodeBreakpoint::PatchCode() { |
void CodeBreakpoint::RestoreCode() { |
ASSERT(is_enabled_); |
- switch (breakpoint_kind_) { |
- case PcDescriptors::kIcCall: |
- case PcDescriptors::kUnoptStaticCall: |
- case PcDescriptors::kClosureCall: |
- case PcDescriptors::kRuntimeCall: |
- case PcDescriptors::kReturn: { |
- const Code& code = Code::Handle(code_); |
- CodePatcher::PatchStaticCallAt(pc_, code, saved_value_); |
- break; |
+ const Code& code = Code::Handle(code_); |
+ const Instructions& instrs = Instructions::Handle(code.instructions()); |
+ { |
+ WritableInstructionsScope writable(instrs.EntryPoint(), instrs.size()); |
+ switch (breakpoint_kind_) { |
+ case PcDescriptors::kIcCall: |
+ case PcDescriptors::kUnoptStaticCall: |
+ case PcDescriptors::kClosureCall: |
+ case PcDescriptors::kRuntimeCall: |
+ case PcDescriptors::kReturn: { |
+ CodePatcher::PatchStaticCallAt(pc_, code, saved_value_); |
+ break; |
+ } |
} |
- default: |
- UNREACHABLE(); |
} |
is_enabled_ = false; |
} |