diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-11-06 08:39:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-06 08:39:13 +0100 |
| commit | 5ef33e7c7ea58f3777b0acac2335bd940b8a1fa6 (patch) | |
| tree | af775c70c1a95ef8166f6ac129517a28e6c72397 /src/link/MachO | |
| parent | c8a5ad6d9db529f3440bfd53b1bda8ded6a50a7c (diff) | |
| parent | 76fb3e062161e84554e0665444135281f7bcaf74 (diff) | |
| download | zig-5ef33e7c7ea58f3777b0acac2335bd940b8a1fa6.tar.gz zig-5ef33e7c7ea58f3777b0acac2335bd940b8a1fa6.zip | |
Merge pull request #13459 from ziglang/issue-13457
macho: do not zero-out file if there are no nonzerofill sects
Diffstat (limited to 'src/link/MachO')
| -rw-r--r-- | src/link/MachO/zld.zig | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/link/MachO/zld.zig b/src/link/MachO/zld.zig index bccf1ec1d1..3a2ea79c6e 100644 --- a/src/link/MachO/zld.zig +++ b/src/link/MachO/zld.zig @@ -4300,24 +4300,21 @@ pub fn linkWithZld(macho_file: *MachO, comp: *Compilation, prog_node: *std.Progr // segment and the beginning of __LINKEDIT segment is zerofilled as the loader will // copy-paste this space into memory for quicker zerofill operation. if (zld.getSegmentByName("__DATA")) |data_seg_id| blk: { - var physical_zerofill_start: u64 = 0; + var physical_zerofill_start: ?u64 = null; const section_indexes = zld.getSectionIndexes(data_seg_id); for (zld.sections.items(.header)[section_indexes.start..section_indexes.end]) |header| { if (header.isZerofill() and header.size > 0) break; physical_zerofill_start = header.offset + header.size; } else break :blk; + const start = physical_zerofill_start orelse break :blk; const linkedit = zld.getLinkeditSegmentPtr(); - const physical_zerofill_size = math.cast(usize, linkedit.fileoff - physical_zerofill_start) orelse - return error.Overflow; - if (physical_zerofill_size > 0) { - log.debug("zeroing out zerofill area of length {x} at {x}", .{ - physical_zerofill_size, - physical_zerofill_start, - }); - var padding = try zld.gpa.alloc(u8, physical_zerofill_size); + const size = math.cast(usize, linkedit.fileoff - start) orelse return error.Overflow; + if (size > 0) { + log.debug("zeroing out zerofill area of length {x} at {x}", .{ size, start }); + var padding = try zld.gpa.alloc(u8, size); defer zld.gpa.free(padding); mem.set(u8, padding, 0); - try zld.file.pwriteAll(padding, physical_zerofill_start); + try zld.file.pwriteAll(padding, start); } } |
