diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-12-08 11:22:16 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-12-09 09:24:25 +0100 |
| commit | aa2f48f013c9a1f4847d49d85be82ece138190ea (patch) | |
| tree | 2280526575151ec16e9d99e897229d2a407cd288 /src/link | |
| parent | fa44c73c1efe2dae62c80a7785b496d83ddac8d1 (diff) | |
| download | zig-aa2f48f013c9a1f4847d49d85be82ece138190ea.tar.gz zig-aa2f48f013c9a1f4847d49d85be82ece138190ea.zip | |
dsym: reuse growSection where possible
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/Dwarf.zig | 5 | ||||
| -rw-r--r-- | src/link/MachO/DebugSymbols.zig | 24 |
2 files changed, 10 insertions, 19 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index 15df5c84c3..abcde2b29c 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -2569,7 +2569,10 @@ fn addDIFile(self: *Dwarf, mod: *Module, decl_index: Module.Decl.Index) !u28 { if (!gop.found_existing) { switch (self.bin_file.tag) { .elf => self.bin_file.cast(File.Elf).?.debug_line_header_dirty = true, - .macho => self.bin_file.cast(File.MachO).?.d_sym.?.debug_line_header_dirty = true, + .macho => { + const d_sym = self.bin_file.cast(File.MachO).?.getDebugSymbols().?; + d_sym.markDirty(d_sym.debug_line_section_index.?); + }, .wasm => {}, else => unreachable, } diff --git a/src/link/MachO/DebugSymbols.zig b/src/link/MachO/DebugSymbols.zig index 2191527dbb..6a6bea998e 100644 --- a/src/link/MachO/DebugSymbols.zig +++ b/src/link/MachO/DebugSymbols.zig @@ -169,6 +169,7 @@ pub fn growSection(self: *DebugSymbols, sect_index: u8, needed_size: u32) !void existing_size, ); if (amt != existing_size) return error.InputOutput; + sect.offset = @intCast(u32, new_offset); } @@ -283,24 +284,11 @@ pub fn flushModule(self: *DebugSymbols, macho_file: *MachO) !void { } { - const debug_strtab_sect = &self.sections.items[self.debug_str_section_index.?]; - if (self.debug_string_table_dirty or self.dwarf.strtab.items.len != debug_strtab_sect.size) { - const allocated_size = self.allocatedSize(debug_strtab_sect.offset); - const needed_size = self.dwarf.strtab.items.len; - - if (needed_size > allocated_size) { - debug_strtab_sect.size = 0; // free the space - const new_offset = self.findFreeSpace(needed_size, 1); - debug_strtab_sect.offset = @intCast(u32, new_offset); - } - debug_strtab_sect.size = @intCast(u32, needed_size); - - log.debug("__debug_strtab start=0x{x} end=0x{x}", .{ - debug_strtab_sect.offset, - debug_strtab_sect.offset + needed_size, - }); - - try self.file.pwriteAll(self.dwarf.strtab.items, debug_strtab_sect.offset); + const sect_index = self.debug_str_section_index.?; + if (self.debug_string_table_dirty or self.dwarf.strtab.items.len != self.getSection(sect_index).size) { + const needed_size = @intCast(u32, self.dwarf.strtab.items.len); + try self.growSection(sect_index, needed_size); + try self.file.pwriteAll(self.dwarf.strtab.items, self.getSection(sect_index).offset); self.debug_string_table_dirty = false; } } |
