Author: Remi Meier <remi.me...@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} _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit