diff options
| author | bors <bors@rust-lang.org> | 2013-04-21 17:33:52 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-04-21 17:33:52 -0700 |
| commit | 3830040a89297dd55f920ec26ab97fb2e33c7a00 (patch) | |
| tree | e4fa41d32b9d61c5fe1db10d5ba7604f5dcc17a4 | |
| parent | 6a31525c50fc5f2e2ad63bf30ec80c1279bf1fe4 (diff) | |
| parent | 5cc6a0bf327e84569166d0ae7c07615e5afd5238 (diff) | |
| download | rust-3830040a89297dd55f920ec26ab97fb2e33c7a00.tar.gz rust-3830040a89297dd55f920ec26ab97fb2e33c7a00.zip | |
auto merge of #5887 : jdm/rust/stackbounds, r=brson
This is needed to allow GC to work in SpiderMonkey.
| -rw-r--r-- | src/libcore/gc.rs | 1 | ||||
| -rw-r--r-- | src/rt/rust_builtin.cpp | 5 | ||||
| -rw-r--r-- | src/rt/rust_task.h | 1 | ||||
| -rw-r--r-- | src/rt/rustrt.def.in | 1 |
4 files changed, 8 insertions, 0 deletions
diff --git a/src/libcore/gc.rs b/src/libcore/gc.rs index ec2658147c5..71d9ab439f3 100644 --- a/src/libcore/gc.rs +++ b/src/libcore/gc.rs @@ -73,6 +73,7 @@ pub mod rustrt { pub unsafe fn rust_gc_metadata() -> *Word; pub unsafe fn rust_get_stack_segment() -> *StackSegment; + pub unsafe fn rust_get_c_stack() -> *StackSegment; } } diff --git a/src/rt/rust_builtin.cpp b/src/rt/rust_builtin.cpp index a0db6f64f69..ee025a39ff4 100644 --- a/src/rt/rust_builtin.cpp +++ b/src/rt/rust_builtin.cpp @@ -549,6 +549,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 34d5a5a86f2..7aa21604203 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -374,6 +374,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 cfc7abac6eb..977e0248ca2 100644 --- a/src/rt/rustrt.def.in +++ b/src/rt/rustrt.def.in @@ -49,6 +49,7 @@ rust_task_is_unwinding rust_get_task rust_try_get_task rust_get_stack_segment +rust_get_c_stack rust_log_str start_task vec_reserve_shared_actual |
