From 71e1d7cb8bfe52ccf82f5ba64d1c5d6c5b5077fc Mon Sep 17 00:00:00 2001 From: Matthew Lugg Date: Mon, 25 May 2026 06:41:30 +0100 Subject: [PATCH] codegen.x86_64: fix Elf2 relocations under PIC --- src/codegen/x86_64/Emit.zig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/codegen/x86_64/Emit.zig b/src/codegen/x86_64/Emit.zig index 075648af1c4d4e65b5920acf3ee6b125daea7c48..9f12fb5ad081d977ed8ce834da71104670f2a1ae 100644 --- a/src/codegen/x86_64/Emit.zig +++ b/src/codegen/x86_64/Emit.zig @@ -850,8 +850,12 @@ fn encodeInst(emit: *Emit, lowered_inst: Instruction, reloc_info: []const RelocI emit.atom_id, end_offset - 4, target.symbol, - reloc.off, - .{ .X86_64 = .@"32S" }, + if (emit.pic) reloc.off - 4 else reloc.off, + .{ .X86_64 = rt: { + if (!emit.pic) break :rt .@"32S"; + if (target.is_extern and !target.force_pcrel_direct) break :rt .GOTPCREL; + break :rt .PC32; + } }, ) else if (emit.bin_file.cast(.coff2)) |coff| try coff.addReloc( @enumFromInt(@intFromEnum(emit.atom_id)), end_offset - 4, -- 2.54.0