aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorDale Weiler <weilercdale@gmail.com>2022-01-10 17:57:33 -0500
committerDale Weiler <weilercdale@gmail.com>2022-01-10 17:57:33 -0500
commit8f91e9307c6ea7a243001efb2ecb135d37587301 (patch)
tree72824a9b0270204fbb089e254db13d08e6123fa6 /src/llvm_backend.cpp
parent32ec1162bf467359ed47ba0bd4e74ec0c7fbd167 (diff)
shared library fixes
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp8
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]));
}