Skip to content

Commit b7a7120

Browse files
committed
give rust_metadata internal linkage but mark it as used. This allows
multiple static crates to be used.
1 parent a467e8e commit b7a7120

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

src/comp/middle/trans.rs

+11
Original file line numberDiff line numberDiff line change
@@ -8564,6 +8564,17 @@ fn write_metadata(&@trans::crate_ctxt cx, &@ast::crate crate) {
85648564
str::buf("rust_metadata"));
85658565
llvm::LLVMSetInitializer(llglobal, llconst);
85668566
llvm::LLVMSetSection(llglobal, str::buf(x86::get_meta_sect_name()));
8567+
llvm::LLVMSetLinkage(llglobal,
8568+
lib::llvm::LLVMInternalLinkage as llvm::Linkage);
8569+
8570+
auto t_ptr_i8 = T_ptr(T_i8());
8571+
llglobal = llvm::LLVMConstBitCast(llglobal, t_ptr_i8);
8572+
auto llvm_used =
8573+
llvm::LLVMAddGlobal(cx.llmod, T_array(t_ptr_i8, 1u),
8574+
str::buf("llvm_used"));
8575+
llvm::LLVMSetLinkage(llvm_used,
8576+
lib::llvm::LLVMAppendingLinkage as llvm::Linkage);
8577+
llvm::LLVMSetInitializer(llvm_used, C_array(t_ptr_i8, ~[llglobal]));
85678578
}
85688579

85698580
fn trans_crate(&session::session sess, &@ast::crate crate, &ty::ctxt tcx,

0 commit comments

Comments
 (0)