Author: Edd Barrett <vex...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit