about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-06-19 16:08:07 -0700
committerBrian Anderson <banderson@mozilla.com>2013-06-19 16:08:07 -0700
commit5086c0850ebdd8407901d108f312ab141e4a4a18 (patch)
treefb43dfb0dbb3a73234f057ca58a46033d6783b95
parente1555f9b5628af2b6c6ed344cad621399cb7684d (diff)
downloadrust-5086c0850ebdd8407901d108f312ab141e4a4a18.tar.gz
rust-5086c0850ebdd8407901d108f312ab141e4a4a18.zip
std::rt: Update GC metadata in init
-rw-r--r--src/libstd/rt/mod.rs5
-rw-r--r--src/rt/rust_gc_metadata.cpp5
-rw-r--r--src/rt/rustrt.def.in1
3 files changed, 11 insertions, 0 deletions
diff --git a/src/libstd/rt/mod.rs b/src/libstd/rt/mod.rs
index dd4c71eca74..a80fb15bad7 100644
--- a/src/libstd/rt/mod.rs
+++ b/src/libstd/rt/mod.rs
@@ -186,6 +186,11 @@ pub fn start(_argc: int, _argv: **u8, crate_map: *u8, main: ~fn()) -> int {
 /// based on the RUST_LOG environment variable.
 pub fn init(crate_map: *u8) {
     logging::init(crate_map);
+    unsafe { rust_update_gc_metadata(crate_map) }
+
+    extern {
+        fn rust_update_gc_metadata(crate_map: *u8);
+    }
 }
 
 /// One-time runtime cleanup.
diff --git a/src/rt/rust_gc_metadata.cpp b/src/rt/rust_gc_metadata.cpp
index fbf0575b31d..e37856255a7 100644
--- a/src/rt/rust_gc_metadata.cpp
+++ b/src/rt/rust_gc_metadata.cpp
@@ -79,6 +79,11 @@ rust_gc_metadata() {
     return (void *)global_safe_points;
 }
 
+extern "C" CDECL void
+rust_update_gc_metadata(const void* map) {
+    update_gc_metadata(map);
+}
+
 //
 // Local Variables:
 // mode: C++
diff --git a/src/rt/rustrt.def.in b/src/rt/rustrt.def.in
index 9b49583519e..c93d29f6148 100644
--- a/src/rt/rustrt.def.in
+++ b/src/rt/rustrt.def.in
@@ -178,6 +178,7 @@ rust_call_tydesc_glue
 tdefl_compress_mem_to_heap
 tinfl_decompress_mem_to_heap
 rust_gc_metadata
+rust_update_gc_metadata
 rust_uv_ip4_port
 rust_uv_ip6_port
 rust_uv_tcp_getpeername