[pypy-commit] pypy reverse-debugger-updated: Fix replaying by adding back hash field to GC header.
mjacob
pypy.commits at gmail.com
Thu Mar 22 07:57:34 EDT 2018
Author: Manuel Jacob <me at manueljacob.de>
Branch: reverse-debugger-updated
Changeset: r94063:0365344dd2f6
Date: 2018-03-22 12:56 +0100
http://bitbucket.org/pypy/pypy/changeset/0365344dd2f6/
Log: Fix replaying by adding back hash field to GC header.
diff --git a/rpython/memory/gctransform/boehm.py b/rpython/memory/gctransform/boehm.py
--- a/rpython/memory/gctransform/boehm.py
+++ b/rpython/memory/gctransform/boehm.py
@@ -28,7 +28,7 @@
ll_malloc_varsize_no_length = mh.ll_malloc_varsize_no_length
ll_malloc_varsize = mh.ll_malloc_varsize
- fields = []
+ fields = [("hash", lltype.Signed)]
if translator and translator.config.translation.reverse_debugger:
fields.append(("uid", lltype.SignedLongLong))
hints = {'hints': {'gcheader': True}}
diff --git a/rpython/translator/revdb/src-revdb/revdb.c b/rpython/translator/revdb/src-revdb/revdb.c
--- a/rpython/translator/revdb/src-revdb/revdb.c
+++ b/rpython/translator/revdb/src-revdb/revdb.c
@@ -410,8 +410,17 @@
RPY_EXTERN
Signed rpy_reverse_db_identityhash(struct pypy_header0 *obj)
{
- /* XXX This will make all prebuilt objects have id-hash 0. */
- return obj->h_uid;
+ /* Boehm only */
+ if (obj->h_hash == 0) {
+ /* We never need to record anything: if h_hash is zero (which
+ is the case for all newly allocated objects), then we just
+ copy h_uid. This gives a stable answer. This would give
+ 0 for all prebuilt objects, but these should not have a
+ null h_hash anyway.
+ */
+ obj->h_hash = obj->h_uid;
+ }
+ return obj->h_hash;
}
RPY_EXTERN
More information about the pypy-commit
mailing list