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 {...@@ -62,7 +62,7 @@ pub fn emitMir(emit: *Emit) Error!void {
62 .pcrel = true,62 .pcrel = true,
63 .has_subtractor = false,63 .has_subtractor = false,
64 .length = 2,64 .length = 2,
65 .symbolnum = 0,65 .symbolnum = @intCast(symbol.sym_index),
66 },66 },
67 });67 });
68 } else if (emit.lower.bin_file.cast(link.File.Coff)) |coff_file| {68 } else if (emit.lower.bin_file.cast(link.File.Coff)) |coff_file| {
...@@ -165,7 +165,9 @@ pub fn emitMir(emit: *Emit) Error!void {...@@ -165,7 +165,9 @@ pub fn emitMir(emit: *Emit) Error!void {
165 const @"type": link.File.MachO.Relocation.Type = if (sym.flags.needs_zig_got and !is_obj_or_static_lib)165 const @"type": link.File.MachO.Relocation.Type = if (sym.flags.needs_zig_got and !is_obj_or_static_lib)
166 .zig_got_load166 .zig_got_load
167 else if (sym.flags.needs_got)167 else if (sym.flags.needs_got)
168 .got_load168 // 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
169 else if (sym.flags.tlv)171 else if (sym.flags.tlv)
170 .tlv172 .tlv
171 else173 else
...@@ -180,7 +182,7 @@ pub fn emitMir(emit: *Emit) Error!void {...@@ -180,7 +182,7 @@ pub fn emitMir(emit: *Emit) Error!void {
180 .pcrel = true,182 .pcrel = true,
181 .has_subtractor = false,183 .has_subtractor = false,
182 .length = 2,184 .length = 2,
183 .symbolnum = 0,185 .symbolnum = @intCast(data.sym_index),
184 },186 },
185 });187 });
186 } else unreachable,188 } else unreachable,
src/link/MachO/ZigObject.zig+6-9
...@@ -390,7 +390,7 @@ pub fn getDeclVAddr(...@@ -390,7 +390,7 @@ pub fn getDeclVAddr(
390 .pcrel = false,390 .pcrel = false,
391 .has_subtractor = false,391 .has_subtractor = false,
392 .length = 3,392 .length = 3,
393 .symbolnum = 0,393 .symbolnum = @intCast(sym.nlist_idx),
394 },394 },
395 });395 });
396 return vaddr;396 return vaddr;
...@@ -416,7 +416,7 @@ pub fn getAnonDeclVAddr(...@@ -416,7 +416,7 @@ pub fn getAnonDeclVAddr(
416 .pcrel = false,416 .pcrel = false,
417 .has_subtractor = false,417 .has_subtractor = false,
418 .length = 3,418 .length = 3,
419 .symbolnum = 0,419 .symbolnum = @intCast(sym.nlist_idx),
420 },420 },
421 });421 });
422 return vaddr;422 return vaddr;
...@@ -856,21 +856,18 @@ fn createTlvDescriptor(...@@ -856,21 +856,18 @@ fn createTlvDescriptor(
856 atom.alignment = alignment;856 atom.alignment = alignment;
857 atom.size = size;857 atom.size = size;
858858
859 const tlv_bootstrap_index = blk: {859 const tlv_bootstrap_index = try self.getGlobalSymbol(macho_file, "_tlv_bootstrap", null);
860 const index = try self.getGlobalSymbol(macho_file, "_tlv_bootstrap", null);
861 break :blk self.symbols.items[index];
862 };
863 try atom.addReloc(macho_file, .{860 try atom.addReloc(macho_file, .{
864 .tag = .@"extern",861 .tag = .@"extern",
865 .offset = 0,862 .offset = 0,
866 .target = tlv_bootstrap_index,863 .target = self.symbols.items[tlv_bootstrap_index],
867 .addend = 0,864 .addend = 0,
868 .type = .unsigned,865 .type = .unsigned,
869 .meta = .{866 .meta = .{
870 .pcrel = false,867 .pcrel = false,
871 .has_subtractor = false,868 .has_subtractor = false,
872 .length = 3,869 .length = 3,
873 .symbolnum = 0,870 .symbolnum = @intCast(tlv_bootstrap_index),
874 },871 },
875 });872 });
876 try atom.addReloc(macho_file, .{873 try atom.addReloc(macho_file, .{
...@@ -883,7 +880,7 @@ fn createTlvDescriptor(...@@ -883,7 +880,7 @@ fn createTlvDescriptor(
883 .pcrel = false,880 .pcrel = false,
884 .has_subtractor = false,881 .has_subtractor = false,
885 .length = 3,882 .length = 3,
886 .symbolnum = 0,883 .symbolnum = @intCast(macho_file.getSymbol(init_sym_index).nlist_idx),
887 },884 },
888 });885 });
889886