diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2022-01-10 23:18:04 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-10 23:18:04 +0000 |
| commit | d308473075a3eee947d310814b825c30cb553c9b (patch) | |
| tree | fb86b73dd892508f0d7eec5960200ff5a74303ee /src/llvm_backend.cpp | |
| parent | 32ec1162bf467359ed47ba0bd4e74ec0c7fbd167 (diff) | |
| parent | 4334dbe69ac7b2e03d327c93ff559042c03db427 (diff) | |
Merge pull request #1421 from graphitemaster/linux_shared_library_fixes
Linux shared library fixes
Diffstat (limited to 'src/llvm_backend.cpp')
| -rw-r--r-- | src/llvm_backend.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 5acd2a80f..1a657e47b 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1238,12 +1238,18 @@ void lb_generate_code(lbGenerator *gen) { // NOTE(bill, 2021-05-04): Target machines must be unique to each module because they are not thread safe auto target_machines = array_make<LLVMTargetMachineRef>(permanent_allocator(), gen->modules.entries.count); + // NOTE(dweiler): Dynamic libraries require position-independent code. + LLVMRelocMode reloc_mode = LLVMRelocDefault; + if (build_context.build_mode == BuildMode_DynamicLibrary) { + reloc_mode = LLVMRelocPIC; + } + for_array(i, gen->modules.entries) { target_machines[i] = LLVMCreateTargetMachine( target, target_triple, llvm_cpu, llvm_features, code_gen_level, - LLVMRelocDefault, + reloc_mode, code_mode); LLVMSetModuleDataLayout(gen->modules.entries[i].value->mod, LLVMCreateTargetDataLayout(target_machines[i])); } |