about summary refs log tree commit diff
path: root/src/rt/rust_upcall.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-11-30 17:54:11 -0800
committerBrian Anderson <banderson@mozilla.com>2011-11-30 20:31:33 -0800
commitf2de42c39ac5e2ff3bc916b4bbff1db91181d9fa (patch)
tree249765cf6b484ce6d3575fac9160b07d0632ba15 /src/rt/rust_upcall.cpp
parentdd48a1af58260eb68d87a08cc6dd1b0a589a0eae (diff)
downloadrust-f2de42c39ac5e2ff3bc916b4bbff1db91181d9fa.tar.gz
rust-f2de42c39ac5e2ff3bc916b4bbff1db91181d9fa.zip
rt: Reorganize stack growth code
Diffstat (limited to 'src/rt/rust_upcall.cpp')
-rw-r--r--src/rt/rust_upcall.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp
index 839a9231f45..a8f39cf91da 100644
--- a/src/rt/rust_upcall.cpp
+++ b/src/rt/rust_upcall.cpp
@@ -219,6 +219,26 @@ upcall_call_shim_on_c_stack(void *args, void *fn_ptr) {
     sched->c_context.call_shim_on_c_stack(args, fn_ptr);
 }
 
+struct rust_new_stack2_args {
+  size_t stk_sz;
+  void *args_addr;
+  size_t args_sz;
+};
+
+// A new stack function suitable for calling through
+// upcall_call_shim_on_c_stack
+extern "C" CDECL void *
+upcall_new_stack(struct rust_new_stack2_args *args) {
+    rust_task *task = rust_scheduler::get_task();
+    return task->new_stack(args->stk_sz, args->args_addr, args->args_sz);
+}
+
+extern "C" CDECL void
+upcall_del_stack() {
+    rust_task *task = rust_scheduler::get_task();
+    task->del_stack();
+}
+
 extern "C" _Unwind_Reason_Code
 __gxx_personality_v0(int version,
                      _Unwind_Action actions,