zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 304d38e844f5c2aeb42e3879a230f5916e704c0d (tree)
parent 0524a3c83dcd5d630e762b0769de8057f75c68e5
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Fri, 29 Sep 2023 20:35:28 +0200

elf: simplify logic for growing non-alloc sections

Diffstat:
Msrc/link/Elf.zig | 15+++++----------
1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/src/link/Elf.zig b/src/link/Elf.zig @@ -1028,21 +1028,15 @@ pub fn growNonAllocSection( const shdr = &self.shdrs.items[shdr_index]; if (needed_size > self.allocatedSize(shdr.sh_offset)) { - const existing_size = if (self.symtab_section_index.? == shdr_index) blk: { - const sym_size: u64 = switch (self.ptr_width) { - .p32 => @sizeOf(elf.Elf32_Sym), - .p64 => @sizeOf(elf.Elf64_Sym), - }; - break :blk @as(u64, shdr.sh_info) * sym_size; - } else shdr.sh_size; + const existing_size = shdr.sh_size; shdr.sh_size = 0; // Move all the symbols to a new file location. const new_offset = self.findFreeSpace(needed_size, min_alignment); - log.debug("moving '{?s}' from 0x{x} to 0x{x}", .{ - self.shstrtab.get(shdr.sh_name), - shdr.sh_offset, + log.debug("new '{s}' file offset 0x{x} to 0x{x}", .{ + self.shstrtab.getAssumeExists(shdr.sh_name), new_offset, + new_offset + existing_size, }); if (requires_file_copy) { @@ -3505,6 +3499,7 @@ fn updateSymtabSize(self: *Elf) !void { .p64 => @alignOf(elf.Elf64_Sym), }; const needed_size = (sizes.nlocals + sizes.nglobals + 1) * sym_size; + shdr.sh_size = needed_size; try self.growNonAllocSection(self.symtab_section_index.?, needed_size, sym_align, true); }