From cc276fe3c96965ba39b9fba3b588a1eaa3941d86 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 3 Mar 2012 17:15:51 -0800 Subject: rt: Be more precise with VALGRIND_MAKE_MEM_UNDEFINED --- src/rt/rust_stack.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/rt/rust_stack.cpp') diff --git a/src/rt/rust_stack.cpp b/src/rt/rust_stack.cpp index b5a83832f08..0522b3b9847 100644 --- a/src/rt/rust_stack.cpp +++ b/src/rt/rust_stack.cpp @@ -17,13 +17,15 @@ register_valgrind_stack(stk_seg *stk) { } void -prepare_valgrind_stack(stk_seg *stk) { +reuse_valgrind_stack(stk_seg *stk, uint8_t *sp) { #ifndef NVALGRIND // Establish that the stack is accessible. This must be done when reusing // old stack segments, since the act of popping the stack previously // caused valgrind to consider the whole thing inaccessible. - size_t sz = stk->end - (uintptr_t)&stk->data[0]; - VALGRIND_MAKE_MEM_UNDEFINED(stk->data, sz); + assert(sp >= stk->data && sp <= (uint8_t*) stk->end + && "Stack pointer must be inside stack segment"); + size_t sz = stk->end - (uintptr_t)sp; + VALGRIND_MAKE_MEM_UNDEFINED(sp, sz); #endif } -- cgit 1.4.1-3-g733a5