[pypy-commit] pypy asmmemmgr-for-code-only: Fix more W^X.
vext01
pypy.commits at gmail.com
Wed Aug 31 11:15:36 EDT 2016
Author: Edd Barrett <vext01 at gmail.com>
Branch: asmmemmgr-for-code-only
Changeset: r86783:0b20f17103f9
Date: 2016-08-31 16:15 +0100
http://bitbucket.org/pypy/pypy/changeset/0b20f17103f9/
Log: Fix more W^X.
diff --git a/rpython/jit/backend/llsupport/gcreftracer.py b/rpython/jit/backend/llsupport/gcreftracer.py
--- a/rpython/jit/backend/llsupport/gcreftracer.py
+++ b/rpython/jit/backend/llsupport/gcreftracer.py
@@ -15,11 +15,15 @@
obj = llmemory.cast_adr_to_ptr(obj_addr, lltype.Ptr(GCREFTRACER))
i = 0
length = obj.array_length
+ length_bytes = length * WORD
addr = obj.array_base_addr
+ addr_p = rffi.cast(rffi.CCHARP, addr)
+ set_pages_writable(addr_p, length_bytes)
while i < length:
p = rffi.cast(llmemory.Address, addr + i * WORD)
gc._trace_callback(callback, arg, p)
i += 1
+ set_pages_executable(addr_p, length_bytes)
lambda_gcrefs_trace = lambda: gcrefs_trace
def make_framework_tracer(array_base_addr, gcrefs):
@@ -34,12 +38,13 @@
tr.array_length = length
i = 0
array_base_addr_p = rffi.cast(rffi.CCHARP, array_base_addr)
- rmmap.set_pages_writable(array_base_addr_p, length)
+ length_bytes = length * WORD
+ rmmap.set_pages_writable(array_base_addr_p, length_bytes)
while i < length:
p = rffi.cast(rffi.SIGNEDP, array_base_addr + i * WORD)
p[0] = rffi.cast(lltype.Signed, gcrefs[i])
i += 1
- rmmap.set_pages_executable(array_base_addr_p, length)
+ rmmap.set_pages_executable(array_base_addr_p, length_bytes)
llop.gc_writebarrier(lltype.Void, tr)
# --no GC until here--
return tr
diff --git a/rpython/rlib/rmmap.py b/rpython/rlib/rmmap.py
--- a/rpython/rlib/rmmap.py
+++ b/rpython/rlib/rmmap.py
@@ -746,6 +746,7 @@
def set_pages_executable(addr, size):
assert lltype.typeOf(addr) == rffi.CCHARP
assert isinstance(size, int)
+ #assert size >= 0
rv = mprotect(addr, size, PROT_EXEC | PROT_READ)
if int(rv) < 0:
from rpython.rlib import debug
@@ -754,6 +755,7 @@
def set_pages_writable(addr, size):
assert lltype.typeOf(addr) == rffi.CCHARP
assert isinstance(size, int)
+ #assert size >= 0
rv = mprotect(addr, size, PROT_WRITE | PROT_READ)
if int(rv) < 0:
from rpython.rlib import debug
More information about the pypy-commit
mailing list