[pypy-commit] pypy reverse-debugger: Starts to work, almost.
arigo
pypy.commits at gmail.com
Wed Jun 29 12:20:19 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch: reverse-debugger
Changeset: r85453:2070975d17bc
Date: 2016-06-29 18:21 +0200
http://bitbucket.org/pypy/pypy/changeset/2070975d17bc/
Log: Starts to work, almost.
diff --git a/rpython/translator/c/funcgen.py b/rpython/translator/c/funcgen.py
--- a/rpython/translator/c/funcgen.py
+++ b/rpython/translator/c/funcgen.py
@@ -670,6 +670,12 @@
OP_CAST_ADR_TO_PTR = OP_CAST_POINTER
OP_CAST_OPAQUE_PTR = OP_CAST_POINTER
+ def OP_CAST_PTR_TO_INT(self, op):
+ if self.db.reverse_debugger:
+ from rpython.translator.revdb import gencsupp
+ return gencsupp.cast_ptr_to_int(self, op)
+ return self.OP_CAST_POINTER(op)
+
def OP_LENGTH_OF_SIMPLE_GCARRAY_FROM_OPAQUE(self, op):
return ('%s = *(long *)(((char *)%s) + sizeof(struct pypy_header0));'
' /* length_of_simple_gcarray_from_opaque */'
diff --git a/rpython/translator/c/src/int.h b/rpython/translator/c/src/int.h
--- a/rpython/translator/c/src/int.h
+++ b/rpython/translator/c/src/int.h
@@ -160,7 +160,6 @@
#define OP_CAST_INT_TO_LONGLONGLONG(x,r) r = (__int128_t)(x)
#define OP_CAST_CHAR_TO_INT(x,r) r = (Signed)((unsigned char)(x))
#define OP_CAST_INT_TO_CHAR(x,r) r = (char)(x)
-#define OP_CAST_PTR_TO_INT(x,r) r = (Signed)(x) /* XXX */
#define OP_TRUNCATE_LONGLONG_TO_INT(x,r) r = (Signed)(x)
#define OP_TRUNCATE_LONGLONGLONG_TO_INT(x,r) r = (Signed)(x)
diff --git a/rpython/translator/revdb/gencsupp.py b/rpython/translator/revdb/gencsupp.py
--- a/rpython/translator/revdb/gencsupp.py
+++ b/rpython/translator/revdb/gencsupp.py
@@ -25,6 +25,10 @@
return 'rpy_reverse_db_register_destructor(%s, %s);' % (
funcgen.expr(op.args[0]), funcgen.expr(op.args[1]))
+def cast_ptr_to_int(funcgen, op):
+ return '%s = RPY_REVDB_CAST_PTR_TO_INT(%s);' % (
+ funcgen.expr(op.result), funcgen.expr(op.args[0]))
+
def prepare_database(db):
FUNCPTR = lltype.Ptr(lltype.FuncType([revdb._CMDPTR, lltype.Ptr(rstr.STR)],
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
@@ -1183,6 +1183,9 @@
RPY_EXTERN
int rpy_reverse_db_fq_register(void *obj)
{
+ /*fprintf(stderr, "FINALIZER_TREE: %lld -> %p\n",
+ ((struct pypy_header0 *)obj)->h_uid, obj);
+ */
if (!RPY_RDB_REPLAY) {
return 0; /* recording */
}
diff --git a/rpython/translator/revdb/src-revdb/revdb_include.h b/rpython/translator/revdb/src-revdb/revdb_include.h
--- a/rpython/translator/revdb/src-revdb/revdb_include.h
+++ b/rpython/translator/revdb/src-revdb/revdb_include.h
@@ -29,14 +29,19 @@
RPY_EXTERN void rpy_reverse_db_setup(int *argc_p, char **argv_p[]);
RPY_EXTERN void rpy_reverse_db_teardown(void);
-#if 1 /* enable to print locations to stderr of all the EMITs */
+#if 0 /* enable to print locations to stderr of all the EMITs */
# define _RPY_REVDB_PRINT(mode) \
fprintf(stderr, \
"%s:%d: %0*llx\n", \
__FILE__, __LINE__, 2 * sizeof(_e), \
((unsigned long long)_e) & ((2ULL << (8*sizeof(_e)-1)) - 1))
+# define _RPY_REVDB_PRUID() \
+ fprintf(stderr, \
+ "%s:%d: obj %llu\n", \
+ __FILE__, __LINE__, (unsigned long long) uid)
#else
# define _RPY_REVDB_PRINT(mode) /* nothing */
+# define _RPY_REVDB_PRUID() /* nothing */
#endif
@@ -72,6 +77,7 @@
uid = rpy_reverse_db_unique_id_break(expr); \
rpy_revdb.unique_id_seen = uid + 1; \
((struct pypy_header0 *)expr)->h_uid = uid; \
+ _RPY_REVDB_PRUID(); \
} while (0)
#define OP_REVDB_STOP_POINT(r) \
@@ -113,6 +119,12 @@
#define OP_REVDB_CALL_DESTRUCTOR(obj, r) \
rpy_reverse_db_call_destructor(obj)
+/* Used only for getting a fast hash value that doesn't change too
+ often (with the minimark GC, it changes at most once). Here,
+ we'll just return the UID. */
+#define RPY_REVDB_CAST_PTR_TO_INT(obj) (((struct pypy_header0 *)obj)->h_uid)
+
+
RPY_EXTERN void rpy_reverse_db_flush(void);
RPY_EXTERN void rpy_reverse_db_fetch(const char *file, int line);
RPY_EXTERN void rpy_reverse_db_stop_point(void);
More information about the pypy-commit
mailing list