[pypy-svn] pypy jit-shadowstack: Revert moving asmgcroot to a local import. It was messy to test
arigo
commits-noreply at bitbucket.org
Thu Mar 31 18:00:34 CEST 2011
Author: Armin Rigo <arigo at tunes.org>
Branch: jit-shadowstack
Changeset: r43058:f5e14e5fad38
Date: 2011-03-31 15:40 +0000
http://bitbucket.org/pypy/pypy/changeset/f5e14e5fad38/
Log: Revert moving asmgcroot to a local import. It was messy to test
while keeping as valid RPython code.
diff --git a/pypy/jit/backend/llsupport/test/test_gc.py b/pypy/jit/backend/llsupport/test/test_gc.py
--- a/pypy/jit/backend/llsupport/test/test_gc.py
+++ b/pypy/jit/backend/llsupport/test/test_gc.py
@@ -9,7 +9,6 @@
from pypy.jit.tool.oparser import parse
from pypy.rpython.lltypesystem.rclass import OBJECT, OBJECT_VTABLE
from pypy.jit.metainterp.test.test_optimizeopt import equaloplists
-from pypy.rpython.memory.gctransform import asmgcroot
def test_boehm():
gc_ll_descr = GcLLDescr_boehm(None, None, None)
@@ -181,48 +180,52 @@
p = rffi.cast(rffi.CArrayPtr(llmemory.Address), gcmapstart)
p = rffi.ptradd(p, 2*i)
return llmemory.cast_ptr_to_adr(p)
- asmgcroot = Asmgcroot()
+ saved = gc.asmgcroot
+ try:
+ gc.asmgcroot = Asmgcroot()
+ #
+ gcrootmap = GcRootMap_asmgcc()
+ gcrootmap._gcmap = lltype.malloc(gcrootmap.GCMAP_ARRAY,
+ 1400, flavor='raw',
+ immortal=True)
+ for i in range(700):
+ gcrootmap._gcmap[i*2] = 1200000 + i
+ gcrootmap._gcmap[i*2+1] = i * 100 + 1
+ assert gcrootmap._gcmap_deadentries == 0
+ assert gc.asmgcroot.sort_count == 0
+ gcrootmap._gcmap_maxlength = 1400
+ gcrootmap._gcmap_curlength = 1400
+ gcrootmap._gcmap_sorted = False
+ #
+ gcrootmap.freeing_block(1200000 - 100, 1200000)
+ assert gcrootmap._gcmap_deadentries == 0
+ assert gc.asmgcroot.sort_count == 1
+ #
+ gcrootmap.freeing_block(1200000 + 100, 1200000 + 200)
+ assert gcrootmap._gcmap_deadentries == 100
+ assert gc.asmgcroot.sort_count == 1
+ for i in range(700):
+ if 100 <= i < 200:
+ expected = 0
+ else:
+ expected = i * 100 + 1
+ assert gcrootmap._gcmap[i*2] == 1200000 + i
+ assert gcrootmap._gcmap[i*2+1] == expected
+ #
+ gcrootmap.freeing_block(1200000 + 650, 1200000 + 750)
+ assert gcrootmap._gcmap_deadentries == 150
+ assert gc.asmgcroot.sort_count == 1
+ for i in range(700):
+ if 100 <= i < 200 or 650 <= i:
+ expected = 0
+ else:
+ expected = i * 100 + 1
+ assert gcrootmap._gcmap[i*2] == 1200000 + i
+ assert gcrootmap._gcmap[i*2+1] == expected
#
- gcrootmap = GcRootMap_asmgcc()
- gcrootmap._gcmap = lltype.malloc(gcrootmap.GCMAP_ARRAY,
- 1400, flavor='raw',
- immortal=True)
- for i in range(700):
- gcrootmap._gcmap[i*2] = 1200000 + i
- gcrootmap._gcmap[i*2+1] = i * 100 + 1
- assert gcrootmap._gcmap_deadentries == 0
- assert asmgcroot.sort_count == 0
- gcrootmap._gcmap_maxlength = 1400
- gcrootmap._gcmap_curlength = 1400
- gcrootmap._gcmap_sorted = False
- #
- gcrootmap.freeing_block(1200000 - 100, 1200000, asmgcroot=asmgcroot)
- assert gcrootmap._gcmap_deadentries == 0
- assert asmgcroot.sort_count == 1
- #
- gcrootmap.freeing_block(1200000 + 100, 1200000 + 200,
- asmgcroot=asmgcroot)
- assert gcrootmap._gcmap_deadentries == 100
- assert asmgcroot.sort_count == 1
- for i in range(700):
- if 100 <= i < 200:
- expected = 0
- else:
- expected = i * 100 + 1
- assert gcrootmap._gcmap[i*2] == 1200000 + i
- assert gcrootmap._gcmap[i*2+1] == expected
- #
- gcrootmap.freeing_block(1200000 + 650, 1200000 + 750,
- asmgcroot=asmgcroot)
- assert gcrootmap._gcmap_deadentries == 150
- assert asmgcroot.sort_count == 1
- for i in range(700):
- if 100 <= i < 200 or 650 <= i:
- expected = 0
- else:
- expected = i * 100 + 1
- assert gcrootmap._gcmap[i*2] == 1200000 + i
- assert gcrootmap._gcmap[i*2+1] == expected
+ finally:
+ gc.asmgcroot = saved
+
class TestGcRootMapShadowStack:
class FakeGcDescr:
diff --git a/pypy/jit/backend/llsupport/gc.py b/pypy/jit/backend/llsupport/gc.py
--- a/pypy/jit/backend/llsupport/gc.py
+++ b/pypy/jit/backend/llsupport/gc.py
@@ -16,6 +16,7 @@
from pypy.jit.backend.llsupport.descr import GcCache, get_field_descr
from pypy.jit.backend.llsupport.descr import GcPtrFieldDescr
from pypy.jit.backend.llsupport.descr import get_call_descr
+from pypy.rpython.memory.gctransform import asmgcroot
# ____________________________________________________________
@@ -317,9 +318,7 @@
return j
@rgc.no_collect
- def freeing_block(self, start, stop, asmgcroot=None):
- if asmgcroot is None: # always the case, except for tests
- from pypy.rpython.memory.gctransform import asmgcroot
+ def freeing_block(self, start, stop):
# if [start:stop] is a raw block of assembler, then look up the
# corresponding gcroot markers, and mark them as freed now in
# self._gcmap by setting the 2nd address of every entry to NULL.
More information about the Pypy-commit
mailing list