authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-29 21:12:56+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-31 09:33:49+01:00
logd4966517f6d7204bb4c23204025cbd5ff3e06a03
tree4189ac0c5e6c25370729bc2ddc0bfe4733cd833d
parent1ee628a3e08ab5a150e45e79a778ac04e7f8b1e0

x86_64+macho: emit .got instead of .got_load relocs


2 files changed, 11 insertions(+), 12 deletions(-)

src/arch/x86_64/Emit.zig+5-3
......@@ -62,7 +62,7 @@ pub fn emitMir(emit: *Emit) Error!void {
6262 .pcrel = true,
6363 .has_subtractor = false,
6464 .length = 2,
65 .symbolnum = 0,
65 .symbolnum = @intCast(symbol.sym_index),
6666 },
6767 });
6868 } else if (emit.lower.bin_file.cast(link.File.Coff)) |coff_file| {
......@@ -165,7 +165,9 @@ pub fn emitMir(emit: *Emit) Error!void {
165165 const @"type": link.File.MachO.Relocation.Type = if (sym.flags.needs_zig_got and !is_obj_or_static_lib)
166166 .zig_got_load
167167 else if (sym.flags.needs_got)
168 .got_load
168 // TODO: it is possible to emit .got_load here that can potentially be relaxed
169 // however this requires always to use a MOVQ mnemonic
170 .got
169171 else if (sym.flags.tlv)
170172 .tlv
171173 else
......@@ -180,7 +182,7 @@ pub fn emitMir(emit: *Emit) Error!void {
180182 .pcrel = true,
181183 .has_subtractor = false,
182184 .length = 2,
183 .symbolnum = 0,
185 .symbolnum = @intCast(data.sym_index),
184186 },
185187 });
186188 } else unreachable,
src/link/MachO/ZigObject.zig+6-9
......@@ -390,7 +390,7 @@ pub fn getDeclVAddr(
390390 .pcrel = false,
391391 .has_subtractor = false,
392392 .length = 3,
393 .symbolnum = 0,
393 .symbolnum = @intCast(sym.nlist_idx),
394394 },
395395 });
396396 return vaddr;
......@@ -416,7 +416,7 @@ pub fn getAnonDeclVAddr(
416416 .pcrel = false,
417417 .has_subtractor = false,
418418 .length = 3,
419 .symbolnum = 0,
419 .symbolnum = @intCast(sym.nlist_idx),
420420 },
421421 });
422422 return vaddr;
......@@ -856,21 +856,18 @@ fn createTlvDescriptor(
856856 atom.alignment = alignment;
857857 atom.size = size;
858858
859 const tlv_bootstrap_index = blk: {
860 const index = try self.getGlobalSymbol(macho_file, "_tlv_bootstrap", null);
861 break :blk self.symbols.items[index];
862 };
859 const tlv_bootstrap_index = try self.getGlobalSymbol(macho_file, "_tlv_bootstrap", null);
863860 try atom.addReloc(macho_file, .{
864861 .tag = .@"extern",
865862 .offset = 0,
866 .target = tlv_bootstrap_index,
863 .target = self.symbols.items[tlv_bootstrap_index],
867864 .addend = 0,
868865 .type = .unsigned,
869866 .meta = .{
870867 .pcrel = false,
871868 .has_subtractor = false,
872869 .length = 3,
873 .symbolnum = 0,
870 .symbolnum = @intCast(tlv_bootstrap_index),
874871 },
875872 });
876873 try atom.addReloc(macho_file, .{
......@@ -883,7 +880,7 @@ fn createTlvDescriptor(
883880 .pcrel = false,
884881 .has_subtractor = false,
885882 .length = 3,
886 .symbolnum = 0,
883 .symbolnum = @intCast(macho_file.getSymbol(init_sym_index).nlist_idx),
887884 },
888885 });
889886