[pypy-commit] pypy stmgc-c4: seems to fix one bug - reload frame after stm_invalidate_jmp_buf
Raemi
noreply at buildbot.pypy.org
Fri Oct 11 18:28:11 CEST 2013
Author: Remi Meier <remi.meier at gmail.com>
Branch: stmgc-c4
Changeset: r67324:8291074f521b
Date: 2013-10-11 18:26 +0200
http://bitbucket.org/pypy/pypy/changeset/8291074f521b/
Log: seems to fix one bug - reload frame after stm_invalidate_jmp_buf
diff --git a/rpython/jit/backend/llsupport/assembler.py b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -80,8 +80,6 @@
else:
self.gc_size_of_header = WORD # for tests
self.memcpy_addr = self.cpu.cast_ptr_to_int(memcpy_fn)
- self._build_failure_recovery(False, withfloats=False)
- self._build_failure_recovery(True, withfloats=False)
if gc_ll_descr.stm:
descrs = [gc_ll_descr.P2Rdescr, gc_ll_descr.P2Wdescr]
else:
@@ -90,6 +88,9 @@
self._build_b_slowpath(d, False)
self._build_b_slowpath(d, True)
self._build_b_slowpath(d, False, for_frame=True)
+ # building the barriers needs to happen before these:
+ self._build_failure_recovery(False, withfloats=False)
+ self._build_failure_recovery(True, withfloats=False)
# only for stm:
if gc_ll_descr.stm:
self._build_ptr_eq_slowpath()
diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -439,6 +439,7 @@
if not withcards:
func = descr.get_barrier_fn(self.cpu,
returns_modified_object=is_stm)
+ assert func is not None
else:
assert not is_stm
if descr.jit_wb_cards_set == 0:
@@ -929,6 +930,8 @@
self.mc.LEA_rs(edi.value, FRAME_FIXED_SIZE * WORD)
fn = stmtlocal.stm_invalidate_jmp_buf_fn
self.mc.CALL(imm(self.cpu.cast_ptr_to_int(fn)))
+ # there could have been a collection in invalidate_jmp_buf()
+ self._reload_frame_if_necessary(self.mc)
# the return value is the jitframe
self.mc.MOV_rr(eax.value, ebp.value)
@@ -2531,6 +2534,7 @@
mc.SUB_ri(esp.value, 16 - WORD) # erase the return address
# ||retadr|...||
func = descr.get_b_slowpath(helper_num)
+ assert func != 0
mc.CALL(imm(func))
# get result:
if is_frame:
More information about the pypy-commit
mailing list