about summary refs log tree commit diff
path: root/src/rt/rust_stack.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-03-03 17:15:51 -0800
committerBrian Anderson <banderson@mozilla.com>2012-03-05 19:39:56 -0800
commitcc276fe3c96965ba39b9fba3b588a1eaa3941d86 (patch)
treee0891c8a19fedf11797652052a6dbbcf3e45b2be /src/rt/rust_stack.cpp
parentc78da1e17016d178d55d5f899ab254f5ed44a899 (diff)
downloadrust-cc276fe3c96965ba39b9fba3b588a1eaa3941d86.tar.gz
rust-cc276fe3c96965ba39b9fba3b588a1eaa3941d86.zip
rt: Be more precise with VALGRIND_MAKE_MEM_UNDEFINED
Diffstat (limited to 'src/rt/rust_stack.cpp')
-rw-r--r--src/rt/rust_stack.cpp8
1 files changed, 5 insertions, 3 deletions
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
 }