[pypy-commit] stmgc marker: Pass the segment base to stmcb_expand_marker

arigo noreply at buildbot.pypy.org
Sat Apr 19 21:55:49 CEST 2014


Author: Armin Rigo <arigo at tunes.org>
Branch: marker
Changeset: r1169:8bd21f95eb8a
Date: 2014-04-19 18:41 +0200
http://bitbucket.org/pypy/stmgc/changeset/8bd21f95eb8a/

Log:	Pass the segment base to stmcb_expand_marker

diff --git a/c7/stm/marker.c b/c7/stm/marker.c
--- a/c7/stm/marker.c
+++ b/c7/stm/marker.c
@@ -3,7 +3,7 @@
 #endif
 
 
-void (*stmcb_expand_marker)(uintptr_t odd_number,
+void (*stmcb_expand_marker)(char *segment_base, uintptr_t odd_number,
                             object_t *following_object,
                             char *outputbuf, size_t outputbufsize);
 
@@ -21,7 +21,7 @@
             uintptr_t x = (uintptr_t)current->ss;
             if (x & 1) {
                 /* the stack entry is an odd number */
-                stmcb_expand_marker(x, current[1].ss,
+                stmcb_expand_marker(pseg->pub.segment_base, x, current[1].ss,
                                     pseg->marker_self, _STM_MARKER_LEN);
 
                 if (pseg->marker_self[0] == 0) {
diff --git a/c7/stmgc.h b/c7/stmgc.h
--- a/c7/stmgc.h
+++ b/c7/stmgc.h
@@ -378,7 +378,7 @@
 /* The markers pushed in the shadowstack are an odd number followed by a
    regular pointer.  When needed, this library invokes this callback to
    turn this pair into a human-readable explanation. */
-extern void (*stmcb_expand_marker)(uintptr_t odd_number,
+extern void (*stmcb_expand_marker)(char *segment_base, uintptr_t odd_number,
                                    object_t *following_object,
                                    char *outputbuf, size_t outputbufsize);
 
diff --git a/c7/test/support.py b/c7/test/support.py
--- a/c7/test/support.py
+++ b/c7/test/support.py
@@ -123,7 +123,8 @@
 
 void stm_flush_timing(stm_thread_local_t *, int);
 
-void (*stmcb_expand_marker)(uintptr_t odd_number, object_t *following_object,
+void (*stmcb_expand_marker)(char *segment_base, uintptr_t odd_number,
+                            object_t *following_object,
                             char *outputbuf, size_t outputbufsize);
 
 void stm_push_marker(stm_thread_local_t *, uintptr_t, object_t *);
diff --git a/c7/test/test_marker.py b/c7/test/test_marker.py
--- a/c7/test/test_marker.py
+++ b/c7/test/test_marker.py
@@ -46,8 +46,8 @@
         assert tl.longest_marker_other[0] == '\x00'
 
     def test_abort_marker_no_shadowstack_cb(self):
-        @ffi.callback("void(uintptr_t, object_t *, char *, size_t)")
-        def expand_marker(number, ptr, outbuf, outbufsize):
+        @ffi.callback("void(char *, uintptr_t, object_t *, char *, size_t)")
+        def expand_marker(base, number, ptr, outbuf, outbufsize):
             seen.append(1)
         lib.stmcb_expand_marker = expand_marker
         seen = []
@@ -60,8 +60,8 @@
         assert not seen
 
     def test_abort_marker_shadowstack_cb(self):
-        @ffi.callback("void(uintptr_t, object_t *, char *, size_t)")
-        def expand_marker(number, ptr, outbuf, outbufsize):
+        @ffi.callback("void(char *, uintptr_t, object_t *, char *, size_t)")
+        def expand_marker(base, number, ptr, outbuf, outbufsize):
             s = '%d %r\x00' % (number, ptr)
             assert len(s) <= outbufsize
             outbuf[0:len(s)] = s
@@ -116,8 +116,8 @@
         py.test.raises(EmptyStack, self.pop_root)
 
     def test_stm_expand_marker(self):
-        @ffi.callback("void(uintptr_t, object_t *, char *, size_t)")
-        def expand_marker(number, ptr, outbuf, outbufsize):
+        @ffi.callback("void(char *, uintptr_t, object_t *, char *, size_t)")
+        def expand_marker(base, number, ptr, outbuf, outbufsize):
             s = '%d %r\x00' % (number, ptr)
             assert len(s) <= outbufsize
             outbuf[0:len(s)] = s


More information about the pypy-commit mailing list