]> git.lizzy.rs Git - rust.git/commitdiff
libstd/librustc: Make the crate_map a weak symbol that libstd links against.
authorLuqman Aden <laden@csclub.uwaterloo.ca>
Wed, 18 Sep 2013 21:44:04 +0000 (17:44 -0400)
committerLuqman Aden <laden@csclub.uwaterloo.ca>
Wed, 18 Sep 2013 21:44:04 +0000 (17:44 -0400)
src/librustc/middle/trans/base.rs
src/libstd/rt/crate_map.rs

index 7cc38835ebc3dad93237421b2677897b070a2eb7..762c658ea6ebfc0684556ed4b6519aae6f8338f7 100644 (file)
@@ -2652,17 +2652,18 @@ pub fn get_item_val(ccx: @mut CrateContext, id: ast::NodeId) -> ValueRef {
                             let path = vec::append((*pth).clone(), [path_name(ni.ident)]);
                             foreign::register_foreign_item_fn(ccx, abis, &path, ni)
                         }
-                        ast::foreign_item_static(*) if attr::contains_name(ni.attrs, "crate_map")
-                            => ccx.crate_map,
                         ast::foreign_item_static(*) => {
                             let ident = foreign::link_name(ccx, ni);
-                            let g = do ident.with_c_str |buf| {
-                                unsafe {
+                            unsafe {
+                                let g = do ident.with_c_str |buf| {
                                     let ty = type_of(ccx, ty);
                                     llvm::LLVMAddGlobal(ccx.llmod, ty.to_ref(), buf)
+                                };
+                                if attr::contains_name(ni.attrs, "weak_linkage") {
+                                    lib::llvm::SetLinkage(g, lib::llvm::ExternalWeakLinkage);
                                 }
-                            };
-                            g
+                                g
+                            }
                         }
                     }
                 }
index ee89df2bd9659dee83a7b53213592c711a787a3c..f6ebb8bcdfff7554a151d66568416cf977e8f7cc 100644 (file)
@@ -18,7 +18,8 @@
 
 extern {
     #[cfg(not(stage0))]
-    #[crate_map]
+    #[weak_linkage]
+    #[link_name = "_rust_crate_map_toplevel"]
     static CRATE_MAP: CrateMap;
 }