[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