about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2013-04-21 17:33:52 -0700
committerbors <bors@rust-lang.org>2013-04-21 17:33:52 -0700
commit3830040a89297dd55f920ec26ab97fb2e33c7a00 (patch)
treee4fa41d32b9d61c5fe1db10d5ba7604f5dcc17a4
parent6a31525c50fc5f2e2ad63bf30ec80c1279bf1fe4 (diff)
parent5cc6a0bf327e84569166d0ae7c07615e5afd5238 (diff)
downloadrust-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.rs1
-rw-r--r--src/rt/rust_builtin.cpp5
-rw-r--r--src/rt/rust_task.h1
-rw-r--r--src/rt/rustrt.def.in1
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