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-12-19 15:58:03 -0800
committerBrian Anderson <banderson@mozilla.com>2011-12-19 16:24:10 -0800
commit50dc80f6177d09612a2ef78129f73ca2ef134b6e (patch)
tree99703e4026b258e678c7382187375eda3148f604 /src/rt/rust_upcall.cpp
parentbedcaad97eaeb5ae09c2782a76d92749ac5585c4 (diff)
downloadrust-50dc80f6177d09612a2ef78129f73ca2ef134b6e.tar.gz
rust-50dc80f6177d09612a2ef78129f73ca2ef134b6e.zip
rt: Give upcall_new_stack the same convention as other upcalls
Diffstat (limited to 'src/rt/rust_upcall.cpp')
-rw-r--r--src/rt/rust_upcall.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp
index 981ce0ffb7e..867f9cd58b6 100644
--- a/src/rt/rust_upcall.cpp
+++ b/src/rt/rust_upcall.cpp
@@ -595,23 +595,26 @@ upcall_log_type(const type_desc *tydesc, uint8_t *data, uint32_t level) {
     UPCALL_SWITCH_STACK(&args, upcall_s_log_type);
 }
 
-struct rust_new_stack2_args {
-    void *new_stack;
+struct s_new_stack_args {
+    void *result;
     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
-// FIXME: Convert this to the same arrangement as
-// the other upcalls, simplify __morestack
 extern "C" CDECL void
-upcall_new_stack(struct rust_new_stack2_args *args) {
+upcall_s_new_stack(struct s_new_stack_args *args) {
     rust_task *task = rust_scheduler::get_task();
-    args->new_stack = task->new_stack(args->stk_sz,
-                                      args->args_addr,
-                                      args->args_sz);
+    args->result = task->new_stack(args->stk_sz,
+                                   args->args_addr,
+                                   args->args_sz);
+}
+
+extern "C" CDECL void *
+upcall_new_stack(size_t stk_sz, void *args_addr, size_t args_sz) {
+    s_new_stack_args args = {NULL, stk_sz, args_addr, args_sz};
+    UPCALL_SWITCH_STACK(&args, upcall_s_new_stack);
+    return args.result;
 }
 
 extern "C" CDECL void