From 6e9c33a1efc27dec44ee274b51534abc4f25ab38 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Wed, 19 Sep 2018 18:44:23 -0700 Subject: [PATCH] Mark JIT memory as readable in addition to executable. While we don't currently need this, we will for jump tables and constant pools. --- lib/simplejit/src/backend.rs | 2 +- lib/simplejit/src/memory.rs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/simplejit/src/backend.rs b/lib/simplejit/src/backend.rs index 09a12dd7ad..3fc46cd993 100644 --- a/lib/simplejit/src/backend.rs +++ b/lib/simplejit/src/backend.rs @@ -406,7 +406,7 @@ impl<'simple_jit_backend> Backend for SimpleJITBackend { fn publish(&mut self) { // Now that we're done patching, prepare the memory for execution! self.readonly_memory.set_readonly(); - self.code_memory.set_executable(); + self.code_memory.set_readable_and_executable(); } /// SimpleJIT emits code and data into memory as it processes them, so it diff --git a/lib/simplejit/src/memory.rs b/lib/simplejit/src/memory.rs index b856c19009..f5dcf42780 100644 --- a/lib/simplejit/src/memory.rs +++ b/lib/simplejit/src/memory.rs @@ -113,15 +113,15 @@ impl Memory { Ok(self.current.ptr) } - /// Set all memory allocated in this `Memory` up to now as executable. - pub fn set_executable(&mut self) { + /// Set all memory allocated in this `Memory` up to now as readable and executable. + pub fn set_readable_and_executable(&mut self) { self.finish_current(); for &PtrLen { ptr, len } in &self.allocations[self.executable..] { if len != 0 { unsafe { - region::protect(ptr, len, region::Protection::Execute) - .expect("unable to make memory executable"); + region::protect(ptr, len, region::Protection::ReadExecute) + .expect("unable to make memory readable+executable"); } } }