authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-20 18:23:57+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-24 12:34:42+01:00
logc02a603b63611a3f7963fce64f48ed3d2c10f86d
tree323dec7fae348a4578519e0bfb7d0c6c3ce5a867
parent55f57ceb2e8f900ba281c5cf5524718cf7eb332f

macho: get start index of Zig sections when allocating other sections


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

src/link/MachO.zig+5-4
...@@ -2287,9 +2287,11 @@ fn allocateSections(self: *MachO) !void {...@@ -2287,9 +2287,11 @@ fn allocateSections(self: *MachO) !void {
22872287
2288 const page_size = self.getPageSize();2288 const page_size = self.getPageSize();
2289 const slice = self.sections.slice();2289 const slice = self.sections.slice();
2290 const last_index = for (slice.items(.header), 0..) |header, i| {
2291 if (mem.indexOf(u8, header.segName(), "ZIG")) |_| break i;
2292 } else slice.items(.header).len;
22902293
2291 for (slice.items(.header), slice.items(.segment_id)) |*header, curr_seg_id| {2294 for (slice.items(.header)[0..last_index], slice.items(.segment_id)[0..last_index]) |*header, curr_seg_id| {
2292 if (mem.indexOf(u8, header.segName(), "ZIG")) |_| continue;
2293 if (prev_seg_id != curr_seg_id) {2295 if (prev_seg_id != curr_seg_id) {
2294 const prev_seg = &self.segments.items[prev_seg_id];2296 const prev_seg = &self.segments.items[prev_seg_id];
2295 const curr_seg = &self.segments.items[curr_seg_id];2297 const curr_seg = &self.segments.items[curr_seg_id];
...@@ -2325,8 +2327,7 @@ fn allocateSections(self: *MachO) !void {...@@ -2325,8 +2327,7 @@ fn allocateSections(self: *MachO) !void {
2325 // TODO iterate over sections again, but consider only zig sections2327 // TODO iterate over sections again, but consider only zig sections
2326 // and move them if they are allocated in file below page-aligned fileoff2328 // and move them if they are allocated in file below page-aligned fileoff
2327 fileoff = mem.alignForward(u32, fileoff, page_size);2329 fileoff = mem.alignForward(u32, fileoff, page_size);
2328 for (slice.items(.header), slice.items(.segment_id)) |*header, seg_id| {2330 for (slice.items(.header)[last_index..], slice.items(.segment_id)[last_index..]) |*header, seg_id| {
2329 if (mem.indexOf(u8, header.segName(), "ZIG") == null) continue;
2330 if (header.isZerofill()) continue;2331 if (header.isZerofill()) continue;
2331 if (header.offset < fileoff) {2332 if (header.offset < fileoff) {
2332 const existing_size = header.size;2333 const existing_size = header.size;