diff options
| author | Dale Weiler <weilercdale@gmail.com> | 2022-01-10 17:57:33 -0500 |
|---|---|---|
| committer | Dale Weiler <weilercdale@gmail.com> | 2022-01-10 17:57:33 -0500 |
| commit | 8f91e9307c6ea7a243001efb2ecb135d37587301 (patch) | |
| tree | 72824a9b0270204fbb089e254db13d08e6123fa6 /src/llvm_backend.cpp | |
| parent | 32ec1162bf467359ed47ba0bd4e74ec0c7fbd167 (diff) | |
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])); } |