diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-09 10:32:39 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-11-09 10:32:39 +0100 |
| commit | 0de5dd2ef144a5a53c5bdbf1d8e45c1d2becd47b (patch) | |
| tree | 7a311d2b81f12cfd4fa8d0ce076a38707c91b03d /src/link | |
| parent | 0299ed50361fbe3b279f9894119ded14439b7dc4 (diff) | |
| download | zig-0de5dd2ef144a5a53c5bdbf1d8e45c1d2becd47b.tar.gz zig-0de5dd2ef144a5a53c5bdbf1d8e45c1d2becd47b.zip | |
elf: misc fixes
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/Elf.zig | 33 | ||||
| -rw-r--r-- | src/link/Elf/ZigObject.zig | 1 |
2 files changed, 2 insertions, 32 deletions
diff --git a/src/link/Elf.zig b/src/link/Elf.zig index a4995a6aef..a6a6c590a5 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -4483,6 +4483,7 @@ fn allocateAllocSectionsObject(self: *Elf) !void { for (self.shdrs.items) |*shdr| { if (shdr.sh_type == elf.SHT_NULL) continue; if (shdr.sh_flags & elf.SHF_ALLOC == 0) continue; + if (shdr.sh_type == elf.SHT_NOBITS) continue; const needed_size = shdr.sh_size; if (needed_size > self.allocatedSize(shdr.sh_offset)) { shdr.sh_size = 0; @@ -4833,38 +4834,6 @@ fn updateSymtabSize(self: *Elf) !void { strtab.sh_size = strsize + 1; } -fn updateSymtabSizeZigObject(self: *Elf, zig_object: *ZigObject) void { - var nlocals: u32 = 0; - var nglobals: u32 = 0; - var strsize: u32 = 0; - - // Section symbols - for (self.output_sections.keys()) |_| { - nlocals += 1; - } - - zig_object.output_symtab_ctx.ilocal = nlocals + 1; - try zig_object.asFile().updateSymtabSize(self); - nlocals += zig_object.output_symtab_ctx.nlocals; - nglobals += zig_object.output_symtab_ctx.nglobals; - strsize += zig_object.output_symtab_ctx.strsize; - zig_object.output_symtab_ctx.iglobal = nlocals + 1; - - const symtab_shdr = &self.shdrs.items[self.symtab_section_index.?]; - symtab_shdr.sh_info = nlocals + 1; - symtab_shdr.sh_link = self.strtab_section_index.?; - - const sym_size: u64 = switch (self.ptr_width) { - .p32 => @sizeOf(elf.Elf32_Sym), - .p64 => @sizeOf(elf.Elf64_Sym), - }; - const needed_size = (nlocals + nglobals + 1) * sym_size; - symtab_shdr.sh_size = needed_size; - - const strtab = &self.shdrs.items[self.strtab_section_index.?]; - strtab.sh_size = strsize + 1; -} - fn writeSyntheticSections(self: *Elf) !void { const gpa = self.base.allocator; diff --git a/src/link/Elf/ZigObject.zig b/src/link/Elf/ZigObject.zig index 03b2572549..f08e5bacbb 100644 --- a/src/link/Elf/ZigObject.zig +++ b/src/link/Elf/ZigObject.zig @@ -75,6 +75,7 @@ pub fn init(self: *ZigObject, elf_file: *Elf) !void { const gpa = elf_file.base.allocator; try self.atoms.append(gpa, 0); // null input section + try self.relocs.append(gpa, .{}); // null relocs section try self.strtab.buffer.append(gpa, 0); const name_off = try self.strtab.insert(gpa, self.path); |
