Author: Armin Rigo <[email protected]>
Branch:
Changeset: r1302:b1ce5fe3d056
Date: 2014-08-12 17:04 +0200
http://bitbucket.org/pypy/stmgc/changeset/b1ce5fe3d056/
Log: debugging...
diff --git a/c7/stm/core.c b/c7/stm/core.c
--- a/c7/stm/core.c
+++ b/c7/stm/core.c
@@ -994,6 +994,9 @@
assert(tl->shadowstack >= pseg->shadowstack_at_start_of_transaction);
tl->shadowstack = pseg->shadowstack_at_start_of_transaction;
#else
+ /* NB. careful, this function might be called more than once to
+ abort a given segment. Make sure that
+ stm_rewind_jmp_restore_shadowstack() is idempotent. */
stm_rewind_jmp_restore_shadowstack(tl);
assert(tl->shadowstack == pseg->shadowstack_at_start_of_transaction);
#endif
diff --git a/c7/stm/rewind_setjmp.c b/c7/stm/rewind_setjmp.c
--- a/c7/stm/rewind_setjmp.c
+++ b/c7/stm/rewind_setjmp.c
@@ -70,8 +70,6 @@
rjthread = saved.rjthread1;
rjthread->head = rjthread->initial_head;
result = rjthread->repeat_count + 1;
- /* check that the shadowstack was correctly restored */
- assert(rjthread->moved_off_ssbase == saved.ss1);
}
rjthread->repeat_count = result;
copy_stack(rjthread, (char *)&saved, saved.ss1);
@@ -119,7 +117,6 @@
sstarget = ssend;
p = p->next;
}
- rjthread->moved_off_ssbase = sstarget;
return sstarget;
}
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -340,9 +340,11 @@
rewind_jmp_longjmp(&(tl)->rjthread)
#define stm_rewind_jmp_forget(tl) \
rewind_jmp_forget(&(tl)->rjthread)
-#define stm_rewind_jmp_restore_shadowstack(tl) \
- ((tl)->shadowstack = (struct stm_shadowentry_s *) \
- rewind_jmp_restore_shadowstack(&(tl)->rjthread))
+#define stm_rewind_jmp_restore_shadowstack(tl) do { \
+ assert(rewind_jmp_armed(&(tl)->rjthread)); \
+ (tl)->shadowstack = (struct stm_shadowentry_s *) \
+ rewind_jmp_restore_shadowstack(&(tl)->rjthread); \
+} while (0)
/* Starting and ending transactions. stm_read(), stm_write() and
stm_allocate() should only be called from within a transaction.
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit