diff options
| author | gingerBill <bill@gingerbill.org> | 2022-01-11 10:56:13 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-01-11 10:56:13 +0000 |
| commit | f2f6c3c67d310c3ffce4c996b732d98f0abbe341 (patch) | |
| tree | 9f500366ca0f5c120593ce4c3dc86514c159e911 /src/llvm_backend.cpp | |
| parent | 847b05013f71c69a4123fe5a4606c88039b716a3 (diff) | |
| parent | d308473075a3eee947d310814b825c30cb553c9b (diff) | |
Merge branch 'master' of https://github.com/odin-lang/Odin
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])); } |