authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-31 08:45:27+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2020-12-31 10:19:04+01:00
log9369176332a11fa92d3a0ed4493a22f4ed2701af
tree3fe581a6ec395a16fd21fd9e96f4429e26b146f9
parentea4ff34e13d9768eedcc9add608be2366d6ad030

macho: advance VM address of DWARF sections when relocating


1 files changed, 6 insertions(+), 4 deletions(-)

src/link/MachO/DebugSymbols.zig+6-4
...@@ -412,7 +412,9 @@ pub fn flushModule(self: *DebugSymbols, allocator: *Allocator, options: link.Opt...@@ -412,7 +412,9 @@ pub fn flushModule(self: *DebugSymbols, allocator: *Allocator, options: link.Opt
412 const allocated_size = dwarf_segment.allocatedSize(debug_abbrev_sect.offset);412 const allocated_size = dwarf_segment.allocatedSize(debug_abbrev_sect.offset);
413 if (needed_size > allocated_size) {413 if (needed_size > allocated_size) {
414 debug_abbrev_sect.size = 0; // free the space414 debug_abbrev_sect.size = 0; // free the space
415 debug_abbrev_sect.offset = @intCast(u32, dwarf_segment.findFreeSpace(needed_size, 1, null));415 const offset = dwarf_segment.findFreeSpace(needed_size, 1, null);
416 debug_abbrev_sect.offset = @intCast(u32, offset);
417 debug_abbrev_sect.addr = dwarf_segment.inner.vmaddr + offset - dwarf_segment.inner.fileoff;
416 }418 }
417 debug_abbrev_sect.size = needed_size;419 debug_abbrev_sect.size = needed_size;
418 log.debug("__debug_abbrev start=0x{x} end=0x{x}", .{420 log.debug("__debug_abbrev start=0x{x} end=0x{x}", .{
...@@ -536,9 +538,9 @@ pub fn flushModule(self: *DebugSymbols, allocator: *Allocator, options: link.Opt...@@ -536,9 +538,9 @@ pub fn flushModule(self: *DebugSymbols, allocator: *Allocator, options: link.Opt
536 const allocated_size = dwarf_segment.allocatedSize(debug_aranges_sect.offset);538 const allocated_size = dwarf_segment.allocatedSize(debug_aranges_sect.offset);
537 if (needed_size > allocated_size) {539 if (needed_size > allocated_size) {
538 debug_aranges_sect.size = 0; // free the space540 debug_aranges_sect.size = 0; // free the space
539 const offset = dwarf_segment.findFreeSpace(needed_size, 16, null);541 const new_offset = dwarf_segment.findFreeSpace(needed_size, 16, null);
540 debug_aranges_sect.offset = @intCast(u32, offset);542 debug_aranges_sect.addr = dwarf_segment.inner.vmaddr + new_offset - dwarf_segment.inner.fileoff;
541 debug_aranges_sect.addr = dwarf_segment.inner.vmaddr + offset - dwarf_segment.inner.fileoff;543 debug_aranges_sect.offset = @intCast(u32, new_offset);
542 }544 }
543 debug_aranges_sect.size = needed_size;545 debug_aranges_sect.size = needed_size;
544 log.debug("__debug_aranges start=0x{x} end=0x{x}", .{546 log.debug("__debug_aranges start=0x{x} end=0x{x}", .{