diff --git a/src/rt/rust_stack.h b/src/rt/rust_stack.h index 9f7353234d39..f310b044acb3 100644 --- a/src/rt/rust_stack.h +++ b/src/rt/rust_stack.h @@ -19,6 +19,12 @@ const uint8_t stack_canary[] = {0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD, 0xAB, 0xCD}; +void +register_valgrind_stack(stk_seg *stk); + +void +deregister_valgrind_stack(stk_seg *stk); + void add_stack_canary(stk_seg *stk); @@ -28,26 +34,22 @@ create_stack(T allocer, size_t sz) { size_t total_sz = sizeof(stk_seg) + sz + sizeof(stack_canary); stk_seg *stk = (stk_seg *)allocer->malloc(total_sz, "stack"); memset(stk, 0, sizeof(stk_seg)); - add_stack_canary(stk); stk->end = (uintptr_t) &stk->data[sz]; + add_stack_canary(stk); + register_valgrind_stack(stk); return stk; } template void destroy_stack(T allocer, stk_seg *stk) { + deregister_valgrind_stack(stk); allocer->free(stk); } -void -register_valgrind_stack(stk_seg *stk); - void prepare_valgrind_stack(stk_seg *stk); -void -deregister_valgrind_stack(stk_seg *stk); - void check_stack_canary(stk_seg *stk); diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 1b2effce73f2..65568ad8ed59 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -567,7 +567,6 @@ rust_task::new_stack(size_t requested_sz) { LOG(this, mem, "reusing existing stack"); stk = stk->prev; A(thread, stk->prev == NULL, "Bogus stack ptr"); - register_valgrind_stack(stk); prepare_valgrind_stack(stk); return; } else { @@ -599,7 +598,6 @@ rust_task::new_stack(size_t requested_sz) { LOGPTR(thread, "stk end", new_stk->end); stk = new_stk; - register_valgrind_stack(stk); prepare_valgrind_stack(stk); total_stack_sz += user_stack_size(new_stk); } @@ -628,7 +626,6 @@ rust_task::del_stack() { old_stk->prev = NULL; } - deregister_valgrind_stack(old_stk); if (delete_stack) { free_stack(old_stk); A(thread, total_stack_sz == 0, "Stack size should be 0"); diff --git a/src/rt/rust_task_thread.cpp b/src/rt/rust_task_thread.cpp index e7a69420aa8a..fbcd164707fa 100644 --- a/src/rt/rust_task_thread.cpp +++ b/src/rt/rust_task_thread.cpp @@ -290,7 +290,6 @@ rust_task_thread::start_main_loop() { I(this, !extra_c_stack); if (cached_c_stack) { - deregister_valgrind_stack(cached_c_stack); destroy_stack(kernel, cached_c_stack); cached_c_stack = NULL; } @@ -372,7 +371,6 @@ rust_task_thread::prepare_c_stack() { I(this, !extra_c_stack); if (!cached_c_stack) { cached_c_stack = create_stack(kernel, C_STACK_SIZE); - register_valgrind_stack(cached_c_stack); prepare_valgrind_stack(cached_c_stack); } } @@ -380,7 +378,6 @@ rust_task_thread::prepare_c_stack() { void rust_task_thread::unprepare_c_stack() { if (extra_c_stack) { - deregister_valgrind_stack(extra_c_stack); destroy_stack(kernel, extra_c_stack); extra_c_stack = NULL; }