[pypy-commit] pypy stmgc-c8: fix for missing manual jitframe clearing

Raemi noreply at buildbot.pypy.org
Thu Mar 12 15:43:44 CET 2015


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: stmgc-c8
Changeset: r76352:64f973219f79
Date: 2015-03-12 14:37 +0100
http://bitbucket.org/pypy/pypy/changeset/64f973219f79/

Log:	fix for missing manual jitframe clearing

diff --git a/rpython/jit/backend/llsupport/rewrite.py b/rpython/jit/backend/llsupport/rewrite.py
--- a/rpython/jit/backend/llsupport/rewrite.py
+++ b/rpython/jit/backend/llsupport/rewrite.py
@@ -328,6 +328,24 @@
             self.newop(op0)
             self.gen_malloc_nursery_varsize_frame(length_box, frame)
             self.gen_initialize_tid(frame, descrs.arraydescr.tid)
+            # we need to explicitely zero all the gc fields, because
+            # of the unusal malloc pattern
+            extra_ops = [
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_zero],
+                             None, descr=descrs.jf_extra_stack_depth),
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_null],
+                             None, descr=descrs.jf_savedata),
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_null],
+                             None, descr=descrs.jf_force_descr),
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_null],
+                             None, descr=descrs.jf_descr),
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_null],
+                             None, descr=descrs.jf_guard_exc),
+                ResOperation(rop.SETFIELD_GC, [frame, self.c_null],
+                             None, descr=descrs.jf_forward),
+            ]
+            for extra_op in extra_ops:
+                self.newop(extra_op)
             self.gen_initialize_len(frame, length_box,
                                     descrs.arraydescr.lendescr)
 
diff --git a/rpython/jit/backend/llsupport/stmrewrite.py b/rpython/jit/backend/llsupport/stmrewrite.py
--- a/rpython/jit/backend/llsupport/stmrewrite.py
+++ b/rpython/jit/backend/llsupport/stmrewrite.py
@@ -141,7 +141,7 @@
         assert self.gc_ll_descr.fielddescr_stmflags is not None
 
         op = ResOperation(rop.SETFIELD_GC,
-                          [v_newgcobj, ConstInt(0)], None,
+                          [v_newgcobj, self.c_zero], None,
                           descr=self.gc_ll_descr.fielddescr_stmflags)
         self.newop(op)
         return GcRewriterAssembler.gen_initialize_tid(self, v_newgcobj, tid)
diff --git a/rpython/jit/backend/llsupport/test/test_stmrewrite.py b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
--- a/rpython/jit/backend/llsupport/test/test_stmrewrite.py
+++ b/rpython/jit/backend/llsupport/test/test_stmrewrite.py
@@ -786,6 +786,14 @@
         p1 = call_malloc_nursery_varsize_frame(i1)
         setfield_gc(p1, 0, descr=stmflagsdescr)
         setfield_gc(p1, 0, descr=tiddescr)
+
+        setfield_gc(p1, 0, descr=jf_extra_stack_depth)
+        setfield_gc(p1, NULL, descr=jf_savedata)
+        setfield_gc(p1, NULL, descr=jf_force_descr)
+        setfield_gc(p1, NULL, descr=jf_descr)
+        setfield_gc(p1, NULL, descr=jf_guard_exc)
+        setfield_gc(p1, NULL, descr=jf_forward)
+
         setfield_gc(p1, i1, descr=framelendescr)
         setfield_gc(p1, ConstClass(frame_info), descr=jf_frame_info)
         setarrayitem_gc(p1, 0, i0, descr=signedframedescr)
@@ -817,6 +825,12 @@
         p5 = call_malloc_nursery_varsize_frame(i1)
         setfield_gc(p5, 0, descr=stmflagsdescr)
         setfield_gc(p5, 0, descr=tiddescr)
+        setfield_gc(p5, 0, descr=jf_extra_stack_depth)
+        setfield_gc(p5, NULL, descr=jf_savedata)
+        setfield_gc(p5, NULL, descr=jf_force_descr)
+        setfield_gc(p5, NULL, descr=jf_descr)
+        setfield_gc(p5, NULL, descr=jf_guard_exc)
+        setfield_gc(p5, NULL, descr=jf_forward)
         setfield_gc(p5, i1, descr=framelendescr)
         setfield_gc(p5, ConstClass(frame_info), descr=jf_frame_info)
         setarrayitem_gc(p5, 0, i0, descr=signedframedescr)
@@ -1303,6 +1317,12 @@
         p1 = call_malloc_nursery_varsize_frame(i1) {54}
         setfield_gc(p1, 0, descr=stmflagsdescr)
         setfield_gc(p1, 0, descr=tiddescr) {54}
+        setfield_gc(p1, 0, descr=jf_extra_stack_depth)
+        setfield_gc(p1, NULL, descr=jf_savedata)
+        setfield_gc(p1, NULL, descr=jf_force_descr)
+        setfield_gc(p1, NULL, descr=jf_descr)
+        setfield_gc(p1, NULL, descr=jf_guard_exc)
+        setfield_gc(p1, NULL, descr=jf_forward)
         setfield_gc(p1, i1, descr=framelendescr) {54}
         setfield_gc(p1, ConstClass(frame_info), descr=jf_frame_info) {54}
         setarrayitem_gc(p1, 0, i0, descr=signedframedescr) {54}


More information about the pypy-commit mailing list