]> git.lizzy.rs Git - rust.git/commitdiff
rt: Don't check the stack canary on most upcalls
authorBrian Anderson <banderson@mozilla.com>
Wed, 21 Dec 2011 00:50:54 +0000 (16:50 -0800)
committerBrian Anderson <banderson@mozilla.com>
Wed, 21 Dec 2011 00:50:54 +0000 (16:50 -0800)
src/rt/rust_task.cpp
src/rt/rust_upcall.cpp

index 2e17075ee5913e9a4de7d323604ffe2b47a5ce04..6949df03f43194997ad60794413afc4d022271a7 100644 (file)
@@ -133,6 +133,9 @@ static stk_seg*
 new_stk(rust_scheduler *sched, rust_task *task, size_t requested_sz)
 {
     LOG(task, mem, "creating new stack for task %" PRIxPTR, task);
+    if (task->stk) {
+        check_stack_canary(task->stk);
+    }
 
     // The minimum stack size, in bytes, of a Rust stack, excluding red zone
     size_t min_sz = get_min_stk_size(sched->min_stack_size);
index 8ccd5ddcf8c6ae75832237f33d65bd128382f75c..4eafb8fcbba8ea9c5cf79233bf2714990cc23bd6 100644 (file)
@@ -27,18 +27,12 @@ check_stack_alignment() __attribute__ ((aligned (16)));
 static void check_stack_alignment() { }
 #endif
 
-static inline void
-do_sanity_check(rust_task *task) {
-    check_stack_alignment();
-    task->check_stack_canary();
-}
-
 #define UPCALL_SWITCH_STACK(A, F) call_upcall_on_c_stack((void*)A, (void*)F)
 
 inline void
 call_upcall_on_c_stack(void *args, void *fn_ptr) {
+    check_stack_alignment();
     rust_task *task = rust_scheduler::get_task();
-    do_sanity_check(task);
     rust_scheduler *sched = task->sched;
     sched->c_context.call_shim_on_c_stack(args, fn_ptr);
 }
@@ -55,7 +49,6 @@ extern "C" void record_sp(void *limit);
 extern "C" CDECL void
 upcall_call_shim_on_c_stack(void *args, void *fn_ptr) {
     rust_task *task = rust_scheduler::get_task();
-    do_sanity_check(task);
 
     // FIXME (1226) - The shim functions generated by rustc contain the
     // morestack prologue, so we need to let them know they have enough
@@ -645,9 +638,7 @@ upcall_del_stack() {
 extern "C" CDECL void
 upcall_reset_stack_limit() {
     rust_task *task = rust_scheduler::get_task();
-    do_sanity_check(task);
     task->reset_stack_limit();
-    task->check_stack_canary();
 }
 
 //