Author: Armin Rigo <ar...@tunes.org> Branch: reverse-debugger Changeset: r85096:0c5d9de93e74 Date: 2016-06-11 12:33 +0200 http://bitbucket.org/pypy/pypy/changeset/0c5d9de93e74/
Log: Tweaks. Can now record and replay duhton. 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 @@ -102,6 +102,9 @@ destrptr = None DESTR_ARG = None + if self.translator.config.translation.reverse_debugger: + destrptr = None # XXX for now + if destrptr: EXC_INSTANCE_TYPE = self.translator.rtyper.exceptiondata.lltype_of_exception_value typename = TYPE.__name__ diff --git a/rpython/rlib/rstack.py b/rpython/rlib/rstack.py --- a/rpython/rlib/rstack.py +++ b/rpython/rlib/rstack.py @@ -5,7 +5,7 @@ import py -from rpython.rlib.objectmodel import we_are_translated +from rpython.rlib.objectmodel import we_are_translated, fetch_translated_config from rpython.rlib.rarithmetic import r_uint from rpython.rlib import rgc from rpython.rtyper.lltypesystem import lltype, rffi @@ -42,6 +42,8 @@ def stack_check(): if not we_are_translated(): return + if fetch_translated_config().translation.reverse_debugger: + return # XXX for now # # Load the "current" stack position, or at least some address that # points close to the current stack head diff --git a/rpython/translator/revdb/rdb-src/revdb.c b/rpython/translator/revdb/rdb-src/revdb.c --- a/rpython/translator/revdb/rdb-src/revdb.c +++ b/rpython/translator/revdb/rdb-src/revdb.c @@ -95,7 +95,7 @@ static void setup_record_mode(int argc, char *argv[]) { - char *filename = getenv("PYPYREVDB"); + char *filename = getenv("PYPYRDB"); rdb_header_t h; assert(RPY_RDB_REPLAY == 0); @@ -103,11 +103,11 @@ rpy_revdb.buf_limit = rpy_rev_buffer + sizeof(rpy_rev_buffer) - 32; if (filename && *filename) { - putenv("PYPYREVDB="); + putenv("PYPYRDB="); rpy_rev_fileno = open(filename, O_WRONLY | O_CLOEXEC | O_CREAT | O_NOCTTY | O_TRUNC, 0600); if (rpy_rev_fileno < 0) { - fprintf(stderr, "Fatal error: can't create PYPYREVDB file '%s'\n", + fprintf(stderr, "Fatal error: can't create PYPYRDB file '%s'\n", filename); abort(); } @@ -473,7 +473,9 @@ exit(1); } if (stop_points != rpy_revdb.stop_point_seen) { - fprintf(stderr, "Bad number of stop points\n"); + fprintf(stderr, "Bad number of stop points " + "(seen %llu, recorded %llu)\n", rpy_revdb.stop_point_seen, + stop_points); exit(1); } if (rpy_revdb.buf_p != rpy_revdb.buf_limit || diff --git a/rpython/translator/revdb/rdb-src/revdb_include.h b/rpython/translator/revdb/rdb-src/revdb_include.h --- a/rpython/translator/revdb/rdb-src/revdb_include.h +++ b/rpython/translator/revdb/rdb-src/revdb_include.h @@ -28,12 +28,21 @@ RPY_EXTERN void rpy_reverse_db_setup(int *argc_p, char **argv_p[]); RPY_EXTERN void rpy_reverse_db_teardown(void); +#if 0 /* enable to print locations to stderr of all the EMITs */ +# define _RPY_REVDB_PRINT(args) fprintf args +#else +# define _RPY_REVDB_PRINT(args) /* nothing */ +#endif + #define RPY_REVDB_EMIT(normal_code, decl_e, variable) \ if (!RPY_RDB_REPLAY) { \ normal_code \ { \ decl_e = variable; \ + _RPY_REVDB_PRINT((stderr, "%s:%d: write %*llx\n", \ + __FILE__, __LINE__, \ + 2 * sizeof(_e), (unsigned long long)_e)); \ memcpy(rpy_revdb.buf_p, &_e, sizeof(_e)); \ if ((rpy_revdb.buf_p += sizeof(_e)) > rpy_revdb.buf_limit) \ rpy_reverse_db_flush(); \ @@ -48,6 +57,9 @@ } \ rpy_revdb.buf_p = _end1; \ memcpy(&_e, _src, sizeof(_e)); \ + _RPY_REVDB_PRINT((stderr, "%s:%d: read %*llx\n", \ + __FILE__, __LINE__, \ + 2 * sizeof(_e), (unsigned long long)_e)); \ variable = _e; \ } diff --git a/rpython/translator/revdb/test/test_basic.py b/rpython/translator/revdb/test/test_basic.py --- a/rpython/translator/revdb/test/test_basic.py +++ b/rpython/translator/revdb/test/test_basic.py @@ -74,7 +74,7 @@ def run(self, *argv): env = os.environ.copy() - env['PYPYREVDB'] = self.rdbname + env['PYPYRDB'] = self.rdbname t = self.t stdout, stderr = t.driver.cbuilder.cmdexec(' '.join(argv), env=env, expect_crash=9) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit