aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-08-28 03:02:04 +0200
committerAlex Rønne Petersen <alex@alexrp.com>2024-08-28 06:18:06 +0200
commit7d9edff11d4c0dd6793bfd4bb2d7e3c2d32c88cd (patch)
tree82c547eab6f1cd93cef5905e88c14b0438cc5a12 /src/codegen
parent93cb44c80582dd02b63b02e7bb7e54d7ad8a4ebc (diff)
downloadzig-7d9edff11d4c0dd6793bfd4bb2d7e3c2d32c88cd.tar.gz
zig-7d9edff11d4c0dd6793bfd4bb2d7e3c2d32c88cd.zip
llvm: Set PIC level 1 for MIPS.
For hysterical raisins, MIPS always uses 1, regardless of `-fpic` vs `-fPIC`.
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig7
-rw-r--r--src/codegen/llvm/bindings.zig4
2 files changed, 7 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index eec46b8379..57ee1c8a67 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -1259,8 +1259,11 @@ pub const Object = struct {
);
errdefer target_machine.dispose();
- if (pic) module.setModulePICLevel();
- if (comp.config.pie) module.setModulePIELevel();
+ const large_pic = target_util.usesLargePIC(comp.root_mod.resolved_target.result);
+
+ if (pic) module.setModulePICLevel(large_pic);
+ if (comp.config.pie) module.setModulePIELevel(large_pic);
+
if (code_model != .Default) module.setModuleCodeModel(code_model);
if (comp.llvm_opt_bisect_limit >= 0) {
diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig
index ebab18f68a..a5017568e5 100644
--- a/src/codegen/llvm/bindings.zig
+++ b/src/codegen/llvm/bindings.zig
@@ -53,10 +53,10 @@ pub const Module = opaque {
extern fn LLVMDisposeModule(*Module) void;
pub const setModulePICLevel = ZigLLVMSetModulePICLevel;
- extern fn ZigLLVMSetModulePICLevel(module: *Module) void;
+ extern fn ZigLLVMSetModulePICLevel(module: *Module, big: bool) void;
pub const setModulePIELevel = ZigLLVMSetModulePIELevel;
- extern fn ZigLLVMSetModulePIELevel(module: *Module) void;
+ extern fn ZigLLVMSetModulePIELevel(module: *Module, large: bool) void;
pub const setModuleCodeModel = ZigLLVMSetModuleCodeModel;
extern fn ZigLLVMSetModuleCodeModel(module: *Module, code_model: CodeModel) void;