| ... | @@ -437,9 +437,11 @@ pub fn parseRelocs(self: *Atom, relocs: []macho.relocation_info, context: RelocC | ... | @@ -437,9 +437,11 @@ pub fn parseRelocs(self: *Atom, relocs: []macho.relocation_info, context: RelocC |
| 437 | }; | 437 | }; |
| 438 | addend = mem.readIntLittle(i32, self.code.items[offset..][0..4]) + correction; | 438 | addend = mem.readIntLittle(i32, self.code.items[offset..][0..4]) + correction; |
| 439 | if (rel.r_extern == 0) { | 439 | if (rel.r_extern == 0) { |
| | 440 | // Note for the future self: when r_extern == 0, we should subtract correction from the |
| | 441 | // addend. |
| 440 | const seg = context.object.load_commands.items[context.object.segment_cmd_index.?].Segment; | 442 | const seg = context.object.load_commands.items[context.object.segment_cmd_index.?].Segment; |
| 441 | const target_sect_base_addr = seg.sections.items[rel.r_symbolnum - 1].addr; | 443 | const target_sect_base_addr = seg.sections.items[rel.r_symbolnum - 1].addr; |
| 442 | addend += @intCast(i64, context.base_addr + offset + correction + 4) - | 444 | addend += @intCast(i64, context.base_addr + offset + 4) - |
| 443 | @intCast(i64, target_sect_base_addr); | 445 | @intCast(i64, target_sect_base_addr); |
| 444 | } | 446 | } |
| 445 | }, | 447 | }, |