Skip to content

Commit 98e36ea

Browse files
committed
macho: handle non-extern UNSIGNED relocs on arm64
1 parent f0ec70e commit 98e36ea

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/link/MachO/Atom.zig

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,15 @@ pub fn parseRelocs(self: *Atom, relocs: []macho.relocation_info, context: RelocC
393393
try addGotEntry(target, context);
394394
},
395395
.ARM64_RELOC_UNSIGNED => {
396-
assert(rel.r_extern == 1);
397396
addend = if (rel.r_length == 3)
398397
mem.readIntLittle(i64, self.code.items[offset..][0..8])
399398
else
400399
mem.readIntLittle(i32, self.code.items[offset..][0..4]);
400+
if (rel.r_extern == 0) {
401+
const seg = context.object.load_commands.items[context.object.segment_cmd_index.?].Segment;
402+
const target_sect_base_addr = seg.sections.items[rel.r_symbolnum - 1].addr;
403+
addend -= @intCast(i64, target_sect_base_addr);
404+
}
401405
try self.addPtrBindingOrRebase(rel, target, context);
402406
},
403407
else => {},

0 commit comments

Comments
 (0)