[pypy-commit] stmgc c7-refactor: Add the shadowstack
arigo
noreply at buildbot.pypy.org
Mon Feb 24 16:49:40 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch: c7-refactor
Changeset: r836:62c2f89f90b9
Date: 2014-02-24 16:49 +0100
http://bitbucket.org/pypy/stmgc/changeset/62c2f89f90b9/
Log: Add the shadowstack
diff --git a/c7/demo/demo2.c b/c7/demo/demo2.c
--- a/c7/demo/demo2.c
+++ b/c7/demo/demo2.c
@@ -21,8 +21,23 @@
__thread stm_thread_local_t stm_thread_local;
-#define PUSH_ROOT(p) (void)0 // XXX...
-#define POP_ROOT(p) (void)0 // XXX...
+#define PUSH_ROOT(p) (*stm_thread_local.shadowstack++ = (object_t *)(p))
+#define POP_ROOT(p) ((p) = (typeof(p))*--stm_thread_local.shadowstack)
+
+void init_shadow_stack(void)
+{
+ object_t **s = (object_t **)malloc(1000 * sizeof(object_t *));
+ assert(s);
+ stm_thread_local.shadowstack = s;
+ stm_thread_local.shadowstack_base = s;
+}
+
+void done_shadow_stack(void)
+{
+ free(stm_thread_local.shadowstack);
+ stm_thread_local.shadowstack = NULL;
+ stm_thread_local.shadowstack_base = NULL;
+}
ssize_t stmcb_size_rounded_up(struct object_s *ob)
@@ -181,6 +196,7 @@
{
int status;
stm_register_thread_local(&stm_thread_local);
+ init_shadow_stack();
PUSH_ROOT(global_chained_list); /* remains forever in the shadow stack */
while (check_sorted() == -1) {
@@ -189,6 +205,7 @@
POP_ROOT(global_chained_list);
assert(stm_thread_local.shadowstack == stm_thread_local.shadowstack_base);
+ done_shadow_stack();
stm_unregister_thread_local(&stm_thread_local);
status = sem_post(&done); assert(status == 0);
return NULL;
@@ -230,6 +247,7 @@
stm_setup();
stm_register_thread_local(&stm_thread_local);
+ init_shadow_stack();
setup_list();
@@ -241,6 +259,7 @@
final_check();
+ done_shadow_stack();
stm_unregister_thread_local(&stm_thread_local);
stm_teardown();
More information about the pypy-commit
mailing list