authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-11-29 17:27:38+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-11-29 11:51:27-08:00
logda0ea909bcce59e265bf5651e5281b6af2216eae
tree1ca6020ffedcd220afaa9512457ba96e34cc2285
parent7a7df392d146b8f77c74b0578fc48f6c927efc93

macho: POINTER_TO_GOT signals a need for a GOT entry

It also signals the need for GOT indirection (unless it can be optimised away via link-time constant optimisation).

1 files changed, 8 insertions(+), 2 deletions(-)

src/link/MachO/Atom.zig+8-2
......@@ -384,7 +384,10 @@ pub fn parseRelocs(self: *Atom, relocs: []macho.relocation_info, context: RelocC
384384 // TODO rewrite relocation
385385 try addStub(target, context);
386386 },
387 .ARM64_RELOC_GOT_LOAD_PAGE21, .ARM64_RELOC_GOT_LOAD_PAGEOFF12 => {
387 .ARM64_RELOC_GOT_LOAD_PAGE21,
388 .ARM64_RELOC_GOT_LOAD_PAGEOFF12,
389 .ARM64_RELOC_POINTER_TO_GOT,
390 => {
388391 // TODO rewrite relocation
389392 try addGotEntry(target, context);
390393 },
......@@ -660,7 +663,10 @@ pub fn resolveRelocs(self: *Atom, macho_file: *MachO) !void {
660663 const is_via_got = got: {
661664 switch (arch) {
662665 .aarch64 => break :got switch (@intToEnum(macho.reloc_type_arm64, rel.@"type")) {
663 .ARM64_RELOC_GOT_LOAD_PAGE21, .ARM64_RELOC_GOT_LOAD_PAGEOFF12 => true,
666 .ARM64_RELOC_GOT_LOAD_PAGE21,
667 .ARM64_RELOC_GOT_LOAD_PAGEOFF12,
668 .ARM64_RELOC_POINTER_TO_GOT,
669 => true,
664670 else => false,
665671 },
666672 .x86_64 => break :got switch (@intToEnum(macho.reloc_type_x86_64, rel.@"type")) {