aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-12-04 13:40:05 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-12-04 16:58:45 +0100
commita84b67468c1494107686642b8d2c4b6a2aee5148 (patch)
tree83090a58ad45517145ef61009e7a232a2ca0f7d4 /src
parent280dad0283652aa176d0a67b8d90e9edc0869c5b (diff)
downloadzig-a84b67468c1494107686642b8d2c4b6a2aee5148.tar.gz
zig-a84b67468c1494107686642b8d2c4b6a2aee5148.zip
dsym: recalculate DWARF segment size when finalizing
Diffstat (limited to 'src')
-rw-r--r--src/link/Dwarf.zig4
-rw-r--r--src/link/MachO/DebugSymbols.zig12
2 files changed, 9 insertions, 7 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index e9d59b1d02..3249bae86b 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -1172,7 +1172,7 @@ pub fn commitDeclState(
if (needed_size > d_sym.allocatedSize(debug_line_sect.offset)) {
const new_offset = d_sym.findFreeSpace(needed_size, 1);
const existing_size = last_src_fn.off;
- log.debug("moving __debug_line section: {} bytes from 0x{x} to 0x{x}", .{
+ std.log.scoped(.dsym).debug("moving __debug_line section: {} bytes from 0x{x} to 0x{x}", .{
existing_size,
debug_line_sect.offset,
new_offset,
@@ -1468,7 +1468,7 @@ fn writeDeclDebugInfo(self: *Dwarf, file: *File, atom: *Atom, dbg_info_buf: []co
if (needed_size > d_sym.allocatedSize(debug_info_sect.offset)) {
const new_offset = d_sym.findFreeSpace(needed_size, 1);
const existing_size = last_decl.off;
- log.debug("moving __debug_info section: {} bytes from 0x{x} to 0x{x}", .{
+ std.log.scoped(.dsym).debug("moving __debug_info section: {} bytes from 0x{x} to 0x{x}", .{
existing_size,
debug_info_sect.offset,
new_offset,
diff --git a/src/link/MachO/DebugSymbols.zig b/src/link/MachO/DebugSymbols.zig
index 2791fcd7a2..95be0064cd 100644
--- a/src/link/MachO/DebugSymbols.zig
+++ b/src/link/MachO/DebugSymbols.zig
@@ -332,11 +332,13 @@ fn finalizeDwarfSegment(self: *DebugSymbols, macho_file: *MachO) void {
break :blk last_seg.vmaddr + last_seg.vmsize;
};
const dwarf_segment = self.getDwarfSegmentPtr();
- const aligned_size = mem.alignForwardGeneric(
- u64,
- dwarf_segment.filesize,
- self.page_size,
- );
+
+ var file_size: u64 = 0;
+ for (self.sections.items) |header| {
+ file_size = @max(file_size, header.offset + header.size);
+ }
+
+ const aligned_size = mem.alignForwardGeneric(u64, file_size, self.page_size);
dwarf_segment.vmaddr = base_vmaddr;
dwarf_segment.filesize = aligned_size;
dwarf_segment.vmsize = aligned_size;