[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