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-02-27 15:42:22 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-27 16:13:51 -0800
commit7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921 (patch)
tree3e25c31b0deaf0ad38edb6f7b15a7505f0bc57be /src/rt/rust_stack.cpp
parentb3f77bf92703543793a8073c8319e461e024cb69 (diff)
downloadrust-7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921.tar.gz
rust-7e9aa6c3c2ae054e32dfcc7c5e4830ce7c4c6921.zip
rt: Don't zero new stacks
Diffstat (limited to 'src/rt/rust_stack.cpp')
-rw-r--r--src/rt/rust_stack.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/rt/rust_stack.cpp b/src/rt/rust_stack.cpp
index 37acc438672..b5a83832f08 100644
--- a/src/rt/rust_stack.cpp
+++ b/src/rt/rust_stack.cpp
@@ -41,3 +41,20 @@ void
 check_stack_canary(stk_seg *stk) {
     assert(stk->canary == canary_value && "Somebody killed the canary");
 }
+
+stk_seg *
+create_stack(memory_region *region, size_t sz) {
+    size_t total_sz = sizeof(stk_seg) + sz;
+    stk_seg *stk = (stk_seg *)region->malloc(total_sz, "stack", false);
+    memset(stk, 0, sizeof(stk_seg));
+    stk->end = (uintptr_t) &stk->data[sz];
+    add_stack_canary(stk);
+    register_valgrind_stack(stk);
+    return stk;
+}
+
+void
+destroy_stack(memory_region *region, stk_seg *stk) {
+    deregister_valgrind_stack(stk);
+    region->free(stk);
+}