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

Unified Diff: runtime/vm/code_generator.cc

Issue 106593002: Write protect executable pages in the VM. Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/code_patcher.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/code_generator.cc
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 44ddb3e1a8f2b0545e41d76eba282b8731fa92fc..9e983a817f5496cc059778d7b1d78319d6ea9963 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -725,9 +725,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(),
@@ -1454,9 +1459,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(),
@@ -1496,7 +1505,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);
}
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/code_patcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698