authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-08-11 10:13:16+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-08-12 11:50:39+02:00
logf2f1bb7cb675fc14dc7754f06329b5780091baaf
tree319899cc33bff973b32b8f6c170f240f07b10f9c
parent92568a0097a6aeb0cd59f1f3dae43d0ecd7a18d0

macho: update __DWARF sections before and after writing out __LINKEDIT


2 files changed, 9 insertions(+), 9 deletions(-)

src/link/Dwarf.zig+1-1
...@@ -1259,7 +1259,7 @@ fn writeDeclDebugInfo(self: *Dwarf, file: *File, atom: *Atom, dbg_info_buf: []co...@@ -1259,7 +1259,7 @@ fn writeDeclDebugInfo(self: *Dwarf, file: *File, atom: *Atom, dbg_info_buf: []co
1259 debug_info_sect.addr = dwarf_segment.vmaddr + new_offset - dwarf_segment.fileoff;1259 debug_info_sect.addr = dwarf_segment.vmaddr + new_offset - dwarf_segment.fileoff;
1260 }1260 }
1261 debug_info_sect.size = needed_size;1261 debug_info_sect.size = needed_size;
1262 d_sym.debug_line_header_dirty = true;1262 d_sym.debug_info_header_dirty = true;
1263 }1263 }
1264 const file_pos = debug_info_sect.offset + atom.off;1264 const file_pos = debug_info_sect.offset + atom.off;
1265 try pwriteDbgInfoNops(1265 try pwriteDbgInfoNops(
src/link/MachO/DebugSymbols.zig+8-8
...@@ -63,17 +63,16 @@ pub const Reloc = struct {...@@ -63,17 +63,16 @@ pub const Reloc = struct {
63pub fn populateMissingMetadata(self: *DebugSymbols, allocator: Allocator) !void {63pub fn populateMissingMetadata(self: *DebugSymbols, allocator: Allocator) !void {
64 if (self.linkedit_segment_cmd_index == null) {64 if (self.linkedit_segment_cmd_index == null) {
65 self.linkedit_segment_cmd_index = @intCast(u8, self.segments.items.len);65 self.linkedit_segment_cmd_index = @intCast(u8, self.segments.items.len);
66 log.debug("found __LINKEDIT segment free space 0x{x} to 0x{x}", .{66 const fileoff = @intCast(u64, self.base.page_size);
67 self.base.page_size,67 const needed_size = @intCast(u64, self.base.page_size) * 2;
68 self.base.page_size * 2,68 log.debug("found __LINKEDIT segment free space 0x{x} to 0x{x}", .{ fileoff, needed_size });
69 });
70 // TODO this needs reworking69 // TODO this needs reworking
71 try self.segments.append(allocator, .{70 try self.segments.append(allocator, .{
72 .segname = makeStaticString("__LINKEDIT"),71 .segname = makeStaticString("__LINKEDIT"),
73 .vmaddr = self.base.page_size,72 .vmaddr = fileoff,
74 .vmsize = self.base.page_size,73 .vmsize = needed_size,
75 .fileoff = self.base.page_size,74 .fileoff = fileoff,
76 .filesize = self.base.page_size,75 .filesize = needed_size,
77 .maxprot = macho.PROT.READ,76 .maxprot = macho.PROT.READ,
78 .initprot = macho.PROT.READ,77 .initprot = macho.PROT.READ,
79 .cmdsize = @sizeOf(macho.segment_command_64),78 .cmdsize = @sizeOf(macho.segment_command_64),
...@@ -284,6 +283,7 @@ pub fn flushModule(self: *DebugSymbols, allocator: Allocator, options: link.Opti...@@ -284,6 +283,7 @@ pub fn flushModule(self: *DebugSymbols, allocator: Allocator, options: link.Opti
284 const lc_writer = lc_buffer.writer();283 const lc_writer = lc_buffer.writer();
285 var ncmds: u32 = 0;284 var ncmds: u32 = 0;
286285
286 self.updateDwarfSegment();
287 try self.writeLinkeditSegmentData(&ncmds, lc_writer);287 try self.writeLinkeditSegmentData(&ncmds, lc_writer);
288 self.updateDwarfSegment();288 self.updateDwarfSegment();
289289