aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2021-11-29 17:27:38 +0100
committerAndrew Kelley <andrew@ziglang.org>2021-11-29 11:51:27 -0800
commitda0ea909bcce59e265bf5651e5281b6af2216eae (patch)
tree1ca6020ffedcd220afaa9512457ba96e34cc2285 /src/link
parent7a7df392d146b8f77c74b0578fc48f6c927efc93 (diff)
downloadzig-da0ea909bcce59e265bf5651e5281b6af2216eae.tar.gz
zig-da0ea909bcce59e265bf5651e5281b6af2216eae.zip
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).
Diffstat (limited to 'src/link')
-rw-r--r--src/link/MachO/Atom.zig10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/link/MachO/Atom.zig b/src/link/MachO/Atom.zig
index 3fbb26d79f..4fffcdb743 100644
--- a/src/link/MachO/Atom.zig
+++ b/src/link/MachO/Atom.zig
@@ -384,7 +384,10 @@ pub fn parseRelocs(self: *Atom, relocs: []macho.relocation_info, context: RelocC
// TODO rewrite relocation
try addStub(target, context);
},
- .ARM64_RELOC_GOT_LOAD_PAGE21, .ARM64_RELOC_GOT_LOAD_PAGEOFF12 => {
+ .ARM64_RELOC_GOT_LOAD_PAGE21,
+ .ARM64_RELOC_GOT_LOAD_PAGEOFF12,
+ .ARM64_RELOC_POINTER_TO_GOT,
+ => {
// TODO rewrite relocation
try addGotEntry(target, context);
},
@@ -660,7 +663,10 @@ pub fn resolveRelocs(self: *Atom, macho_file: *MachO) !void {
const is_via_got = got: {
switch (arch) {
.aarch64 => break :got switch (@intToEnum(macho.reloc_type_arm64, rel.@"type")) {
- .ARM64_RELOC_GOT_LOAD_PAGE21, .ARM64_RELOC_GOT_LOAD_PAGEOFF12 => true,
+ .ARM64_RELOC_GOT_LOAD_PAGE21,
+ .ARM64_RELOC_GOT_LOAD_PAGEOFF12,
+ .ARM64_RELOC_POINTER_TO_GOT,
+ => true,
else => false,
},
.x86_64 => break :got switch (@intToEnum(macho.reloc_type_x86_64, rel.@"type")) {