authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-15 19:35:29+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-10-16 19:33:06+02:00
log5192a2fbbe0222ada60d9abccbadf5e8a2d50684
tree961327c2dcccd24ff097e2c4421c08120b217069
parent17b8e8ab29789e01c206244d6cf6c9bd8c99f27c

elf: do not allocate zerofill segment in file offsets


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

src/link/Elf.zig+4-17
......@@ -736,16 +736,13 @@ pub fn initMetadata(self: *Elf) !void {
736736
737737 if (self.phdr_zig_load_zerofill_index == null) {
738738 const alignment = if (is_linux) self.page_size else @as(u16, ptr_size);
739 self.phdr_zig_load_zerofill_index = try self.allocateSegment(.{
739 self.phdr_zig_load_zerofill_index = try self.addPhdr(.{
740 .type = elf.PT_LOAD,
740741 .addr = if (ptr_bit_width >= 32) 0x14000000 else 0xf000,
741 .memsz = 0,
742 .filesz = 0,
743 .alignment = alignment,
742 .memsz = 1024,
743 .@"align" = alignment,
744744 .flags = elf.PF_R | elf.PF_W,
745745 });
746 const phdr = &self.phdrs.items[self.phdr_zig_load_zerofill_index.?];
747 phdr.p_offset = self.phdrs.items[self.phdr_zig_load_rw_index.?].p_offset; // .bss overlaps .data
748 phdr.p_memsz = 1024;
749746 }
750747
751748 if (self.zig_text_section_index == null) {
......@@ -1588,16 +1585,6 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
15881585 // Beyond this point, everything has been allocated a virtual address and we can resolve
15891586 // the relocations, and commit objects to file.
15901587 if (self.zig_module_index) |index| {
1591 // .bss.zig always overlaps .data.zig in file offset, but is zero-sized in file so it doesn't
1592 // get mapped by the loader
1593 if (self.zig_data_section_index) |data_shndx| blk: {
1594 const bss_shndx = self.zig_bss_section_index orelse break :blk;
1595 const data_phndx = self.phdr_to_shdr_table.get(data_shndx).?;
1596 const bss_phndx = self.phdr_to_shdr_table.get(bss_shndx).?;
1597 self.shdrs.items[bss_shndx].sh_offset = self.shdrs.items[data_shndx].sh_offset;
1598 self.phdrs.items[bss_phndx].p_offset = self.phdrs.items[data_phndx].p_offset;
1599 }
1600
16011588 const zig_module = self.file(index).?.zig_module;
16021589 for (zig_module.atoms.items) |atom_index| {
16031590 const atom_ptr = self.atom(atom_index) orelse continue;