From cab4da70c8577ee7525fb327e7ae79ef9f9e96e5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 20 Dec 2011 16:50:54 -0800 Subject: [PATCH] rt: Don't check the stack canary on most upcalls --- src/rt/rust_task.cpp | 3 +++ src/rt/rust_upcall.cpp | 11 +---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 2e17075ee59..6949df03f43 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -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); diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 8ccd5ddcf8c..4eafb8fcbba 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -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(); } //