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

Reply via email to