Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(408)

Unified Diff: runtime/vm/code_generator.cc

Issue 136563002: Landing: Write protect executable pages in the VM. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Fixed typo and removed debug printing Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/code_generator.cc
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 8ba02377e36770c8ff8a2f966fbdcb349782906c..df274e44b2029c62768403963c2a76c218fef860 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -749,9 +749,14 @@ DEFINE_RUNTIME_ENTRY(PatchStaticCall, 0) {
// 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(),
@@ -1471,9 +1476,13 @@ DEFINE_RUNTIME_ENTRY(FixCallersTarget, 0) {
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(),
@@ -1513,7 +1522,12 @@ void DeoptimizeAt(const Code& optimized_code, uword pc) {
// 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);
+ }
// Mark code as dead (do not GC its embedded objects).
optimized_code.set_is_alive(false);
}

Powered by Google App Engine
This is Rietveld 408576698