diff options
| author | Patrick Walton <[email protected]> | 2011-05-05 12:45:34 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-05-05 12:46:22 -0700 |
| commit | a74feaf1594673bcec77ed45bd4b6766289a25b3 (patch) | |
| tree | 0e9ae545b866d22b99d6d22424fed528a76b6796 /src/comp/back/Link.rs | |
| parent | Put out burning tinderbox. (diff) | |
| download | rust-a74feaf1594673bcec77ed45bd4b6766289a25b3.tar.xz rust-a74feaf1594673bcec77ed45bd4b6766289a25b3.zip | |
rustc: Link with intrinsics.bc; change intrinsics linkage to linkonce_odr
Diffstat (limited to 'src/comp/back/Link.rs')
| -rw-r--r-- | src/comp/back/Link.rs | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/comp/back/Link.rs b/src/comp/back/Link.rs index da165787..ebeda8dc 100644 --- a/src/comp/back/Link.rs +++ b/src/comp/back/Link.rs @@ -2,12 +2,14 @@ import driver.session; import lib.llvm.llvm; import middle.trans; import std._str; +import std.fs; import lib.llvm.llvm.ModuleRef; import lib.llvm.llvm.ValueRef; import lib.llvm.mk_pass_manager; import lib.llvm.mk_target_data; import lib.llvm.mk_type_names; +import lib.llvm.False; tag output_type { output_type_none; @@ -16,8 +18,30 @@ tag output_type { output_type_object; } +fn llvm_err(session.session sess, str msg) { + sess.err(msg + ": " + _str.str_from_cstr(llvm.LLVMRustGetLastError())); + fail; +} + fn link_intrinsics(session.session sess, ModuleRef llmod) { - // TODO + auto path = fs.connect(sess.get_opts().sysroot, "intrinsics.bc"); + auto membuf = + llvm.LLVMRustCreateMemoryBufferWithContentsOfFile(_str.buf(path)); + if ((membuf as uint) == 0u) { + llvm_err(sess, "installation problem: couldn't open intrinstics.bc"); + fail; + } + + auto llintrinsicsmod = llvm.LLVMRustParseBitcode(membuf); + if ((llintrinsicsmod as uint) == 0u) { + llvm_err(sess, "installation problem: couldn't parse intrinstics.bc"); + fail; + } + + if (llvm.LLVMLinkModules(llmod, llintrinsicsmod) == False) { + llvm_err(sess, "couldn't link the module with the intrinsics"); + fail; + } } mod Write { |