diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-09-29 20:35:28 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-09-29 20:35:28 +0200 |
| commit | 304d38e844f5c2aeb42e3879a230f5916e704c0d (patch) | |
| tree | fad54ab79f91eee15ffca149d246eed4a6fcdf50 | |
| parent | 0524a3c83dcd5d630e762b0769de8057f75c68e5 (diff) | |
| download | zig-304d38e844f5c2aeb42e3879a230f5916e704c0d.tar.gz zig-304d38e844f5c2aeb42e3879a230f5916e704c0d.zip | |
elf: simplify logic for growing non-alloc sections
| -rw-r--r-- | src/link/Elf.zig | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 29b882e9f6..c669c80221 100644 --- 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); } |
