Author: Armin Rigo <[email protected]>
Branch: jitframe-on-heap
Changeset: r62001:53913ed189c9
Date: 2013-03-04 11:17 +0100
http://bitbucket.org/pypy/pypy/changeset/53913ed189c9/
Log: Fix: for debugging check we verify that ebp points to a JITFRAME
here; but it may actually point to an already-forwarded object at
this point.
diff --git a/rpython/memory/gc/minimark.py b/rpython/memory/gc/minimark.py
--- a/rpython/memory/gc/minimark.py
+++ b/rpython/memory/gc/minimark.py
@@ -940,6 +940,11 @@
def get_forwarding_address(self, obj):
return llmemory.cast_adr_to_ptr(obj, FORWARDSTUBPTR).forw
+ def get_possibly_forwarded_type_id(self, obj):
+ if self.is_in_nursery(obj) and self.is_forwarded(obj):
+ obj = self.get_forwarding_address(obj)
+ return self.get_type_id(obj)
+
def get_total_memory_used(self):
"""Return the total memory used, not counting any object in the
nursery: only objects in the ArenaCollection or raw-malloced.
diff --git a/rpython/memory/gc/semispace.py b/rpython/memory/gc/semispace.py
--- a/rpython/memory/gc/semispace.py
+++ b/rpython/memory/gc/semispace.py
@@ -438,6 +438,12 @@
def visit_external_object(self, obj):
pass # hook for the HybridGC
+ def get_possibly_forwarded_type_id(self, obj):
+ tid = self.header(obj).tid
+ if self.is_forwarded(obj) and not (tid & GCFLAG_EXTERNAL):
+ obj = self.get_forwarding_address(obj)
+ return self.get_type_id(obj)
+
def set_forwarding_address(self, obj, newobj, objsize):
# To mark an object as forwarded, we set the GCFLAG_FORWARDED and
# overwrite the object with a FORWARDSTUB. Doing so is a bit
diff --git a/rpython/memory/gctransform/asmgcroot.py
b/rpython/memory/gctransform/asmgcroot.py
--- a/rpython/memory/gctransform/asmgcroot.py
+++ b/rpython/memory/gctransform/asmgcroot.py
@@ -413,7 +413,7 @@
# to a JITFRAME object.
from rpython.jit.backend.llsupport.jitframe import STACK_DEPTH_OFS
- tid = self.gc.get_type_id(ebp_in_caller)
+ tid = self.gc.get_possibly_forwarded_type_id(ebp_in_caller)
ll_assert(rffi.cast(lltype.Signed, tid) ==
rffi.cast(lltype.Signed, self.frame_tid),
"found a stack frame that does not belong "
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit