aboutsummaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-08-30 14:47:43 -0700
committerGitHub <noreply@github.com>2024-08-30 14:47:43 -0700
commite4e91a1314abd78a0f06df718459e42e3c9fb62a (patch)
tree0ea10dc19eb14e62fefc329e1ead6110e7c0d5bd /src/codegen
parent5d08b7f0548c61b918504a7b02573127c49c6f97 (diff)
parenta2e691d589ac1d234ee624fdf8fa931d89a719b1 (diff)
downloadzig-e4e91a1314abd78a0f06df718459e42e3c9fb62a.tar.gz
zig-e4e91a1314abd78a0f06df718459e42e3c9fb62a.zip
Merge pull request #21224 from alexrp/mips-gnu-fixes
Fix MIPS PIC level and work around an LLVM bug for `mips(el)-linux-gnueabi(hf)`
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/llvm.zig9
-rw-r--r--src/codegen/llvm/bindings.zig5
2 files changed, 10 insertions, 4 deletions
diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig
index 00ce2ca226..dc8996afda 100644
--- a/src/codegen/llvm.zig
+++ b/src/codegen/llvm.zig
@@ -1276,8 +1276,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) {
@@ -1294,6 +1297,8 @@ pub const Object = struct {
.tsan = options.sanitize_thread,
.sancov = options.fuzz,
.lto = options.lto,
+ // https://github.com/ziglang/zig/issues/21215
+ .allow_fast_isel = !comp.root_mod.resolved_target.result.cpu.arch.isMIPS(),
.asm_filename = null,
.bin_filename = options.bin_path,
.llvm_ir_filename = options.post_ir_path,
diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig
index bb294f27d9..d21fc69ff3 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;
@@ -91,6 +91,7 @@ pub const TargetMachine = opaque {
tsan: bool,
sancov: bool,
lto: bool,
+ allow_fast_isel: bool,
asm_filename: ?[*:0]const u8,
bin_filename: ?[*:0]const u8,
llvm_ir_filename: ?[*:0]const u8,