about summary refs log tree commit diff
path: root/src/rt
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust_builtin.cpp5
-rw-r--r--src/rt/rust_task.h1
-rw-r--r--src/rt/rustrt.def.in1
3 files changed, 7 insertions, 0 deletions
diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp
index 3c6cc9d9245..a2bbaf80c0a 100644
--- a/src/rt/rust_builtin.cpp
+++ b/src/rt/rust_builtin.cpp
@@ -544,6 +544,11 @@ rust_get_stack_segment() {
     return rust_get_current_task()->stk;
 }
 
+extern "C" CDECL stk_seg *
+rust_get_c_stack() {
+    return rust_get_current_task()->get_c_stack();
+}
+
 extern "C" CDECL void
 start_task(rust_task *target, fn_env_pair *f) {
     target->start(f->f, f->env, NULL);
diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h
index 00d20fefc0e..a529db7d317 100644
--- a/src/rt/rust_task.h
+++ b/src/rt/rust_task.h
@@ -367,6 +367,7 @@ public:
     void call_on_c_stack(void *args, void *fn_ptr);
     void call_on_rust_stack(void *args, void *fn_ptr);
     bool have_c_stack() { return c_stack != NULL; }
+    stk_seg *get_c_stack() { return c_stack; }
 
     rust_task_state get_state() { return state; }
     rust_cond *get_cond() { return cond; }
diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in
index 73dbe661d3f..b7ca28d5960 100644
--- a/src/rt/rustrt.def.in
+++ b/src/rt/rustrt.def.in
@@ -48,6 +48,7 @@ rust_task_yield
 rust_task_is_unwinding
 rust_get_task
 rust_get_stack_segment
+rust_get_c_stack
 rust_log_str
 start_task
 vec_reserve_shared_actual