Skip to content

Commit 5cc6a0b

Browse files
committed
rt: Make the C stack segment accessible to runtime users.
1 parent 07e087b commit 5cc6a0b

File tree

4 files changed

+8
-0
lines changed

4 files changed

+8
-0
lines changed

src/libcore/gc.rs

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ pub mod rustrt {
7373
pub unsafe fn rust_gc_metadata() -> *Word;
7474

7575
pub unsafe fn rust_get_stack_segment() -> *StackSegment;
76+
pub unsafe fn rust_get_c_stack() -> *StackSegment;
7677
}
7778
}
7879

src/rt/rust_builtin.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,11 @@ rust_get_stack_segment() {
544544
return rust_get_current_task()->stk;
545545
}
546546

547+
extern "C" CDECL stk_seg *
548+
rust_get_c_stack() {
549+
return rust_get_current_task()->get_c_stack();
550+
}
551+
547552
extern "C" CDECL void
548553
start_task(rust_task *target, fn_env_pair *f) {
549554
target->start(f->f, f->env, NULL);

src/rt/rust_task.h

+1
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ rust_task : public kernel_owned<rust_task>
367367
void call_on_c_stack(void *args, void *fn_ptr);
368368
void call_on_rust_stack(void *args, void *fn_ptr);
369369
bool have_c_stack() { return c_stack != NULL; }
370+
stk_seg *get_c_stack() { return c_stack; }
370371

371372
rust_task_state get_state() { return state; }
372373
rust_cond *get_cond() { return cond; }

src/rt/rustrt.def.in

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ rust_task_yield
4848
rust_task_is_unwinding
4949
rust_get_task
5050
rust_get_stack_segment
51+
rust_get_c_stack
5152
rust_log_str
5253
start_task
5354
vec_reserve_shared_actual

0 commit comments

Comments
 (0)