diff options
| -rw-r--r-- | src/comp/back/Link.rs | 6 | ||||
| -rw-r--r-- | src/comp/lib/llvm.rs | 3 | ||||
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 8 | ||||
| -rw-r--r-- | src/rustllvm/rustllvm.def.in | 1 |
4 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/back/Link.rs b/src/comp/back/Link.rs index 5d9eb9d6..da165787 100644 --- a/src/comp/back/Link.rs +++ b/src/comp/back/Link.rs @@ -16,6 +16,10 @@ tag output_type { output_type_object; } +fn link_intrinsics(session.session sess, ModuleRef llmod) { + // TODO +} + mod Write { fn is_object_or_assembly(output_type ot) -> bool { if (ot == output_type_assembly) { @@ -41,6 +45,8 @@ mod Write { } fn run_passes(session.session sess, ModuleRef llmod, str output) { + link_intrinsics(sess, llmod); + auto pm = mk_pass_manager(); auto opts = sess.get_opts(); diff --git a/src/comp/lib/llvm.rs b/src/comp/lib/llvm.rs index 5e758bc6..cfa82b03 100644 --- a/src/comp/lib/llvm.rs +++ b/src/comp/lib/llvm.rs @@ -848,6 +848,9 @@ native mod llvm = llvm_lib { call. */ fn LLVMRustGetLastError() -> sbuf; + /** Parses the bitcode in the given memory buffer. */ + fn LLVMRustParseBitcode(MemoryBufferRef MemBuf) -> ModuleRef; + /** Links LLVM modules together. `Src` is destroyed by this call and must never be referenced again. */ fn LLVMLinkModules(ModuleRef Dest, ModuleRef Src) -> Bool; diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 01ea6677..3c958830 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -21,6 +21,7 @@ #include "llvm/Target/TargetRegistry.h" #include "llvm/Target/TargetOptions.h" #include "llvm-c/Core.h" +#include "llvm-c/BitReader.h" #include "llvm-c/Object.h" #include <cstdlib> @@ -98,3 +99,10 @@ extern "C" void LLVMRustWriteOutputFile(LLVMPassManagerRef PMR, (void)foo; PM->run(*unwrap(M)); } + +extern "C" LLVMModuleRef LLVMRustParseBitcode(LLVMMemoryBufferRef MemBuf) { + LLVMModuleRef M; + return LLVMParseBitcode(MemBuf, &M, const_cast<char **>(&LLVMRustError)) + ? NULL : M; +} + diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 74acb28b..a5ffa04e 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -1,6 +1,7 @@ LLVMRustCreateMemoryBufferWithContentsOfFile LLVMRustWriteOutputFile LLVMRustGetLastError +LLVMRustParseBitcode LLVMLinkModules LLVMCreateObjectFile LLVMDisposeObjectFile |