| ... | @@ -4483,6 +4483,7 @@ fn allocateAllocSectionsObject(self: *Elf) !void { | ... | @@ -4483,6 +4483,7 @@ fn allocateAllocSectionsObject(self: *Elf) !void { |
| 4483 | for (self.shdrs.items) |*shdr| { | 4483 | for (self.shdrs.items) |*shdr| { |
| 4484 | if (shdr.sh_type == elf.SHT_NULL) continue; | 4484 | if (shdr.sh_type == elf.SHT_NULL) continue; |
| 4485 | if (shdr.sh_flags & elf.SHF_ALLOC == 0) continue; | 4485 | if (shdr.sh_flags & elf.SHF_ALLOC == 0) continue; |
| | 4486 | if (shdr.sh_type == elf.SHT_NOBITS) continue; |
| 4486 | const needed_size = shdr.sh_size; | 4487 | const needed_size = shdr.sh_size; |
| 4487 | if (needed_size > self.allocatedSize(shdr.sh_offset)) { | 4488 | if (needed_size > self.allocatedSize(shdr.sh_offset)) { |
| 4488 | shdr.sh_size = 0; | 4489 | shdr.sh_size = 0; |
| ... | @@ -4833,38 +4834,6 @@ fn updateSymtabSize(self: *Elf) !void { | ... | @@ -4833,38 +4834,6 @@ fn updateSymtabSize(self: *Elf) !void { |
| 4833 | strtab.sh_size = strsize + 1; | 4834 | strtab.sh_size = strsize + 1; |
| 4834 | } | 4835 | } |
| 4835 | | 4836 | |
| 4836 | fn updateSymtabSizeZigObject(self: *Elf, zig_object: *ZigObject) void { | | |
| 4837 | var nlocals: u32 = 0; | | |
| 4838 | var nglobals: u32 = 0; | | |
| 4839 | var strsize: u32 = 0; | | |
| 4840 | | | |
| 4841 | // Section symbols | | |
| 4842 | for (self.output_sections.keys()) |_| { | | |
| 4843 | nlocals += 1; | | |
| 4844 | } | | |
| 4845 | | | |
| 4846 | zig_object.output_symtab_ctx.ilocal = nlocals + 1; | | |
| 4847 | try zig_object.asFile().updateSymtabSize(self); | | |
| 4848 | nlocals += zig_object.output_symtab_ctx.nlocals; | | |
| 4849 | nglobals += zig_object.output_symtab_ctx.nglobals; | | |
| 4850 | strsize += zig_object.output_symtab_ctx.strsize; | | |
| 4851 | zig_object.output_symtab_ctx.iglobal = nlocals + 1; | | |
| 4852 | | | |
| 4853 | const symtab_shdr = &self.shdrs.items[self.symtab_section_index.?]; | | |
| 4854 | symtab_shdr.sh_info = nlocals + 1; | | |
| 4855 | symtab_shdr.sh_link = self.strtab_section_index.?; | | |
| 4856 | | | |
| 4857 | const sym_size: u64 = switch (self.ptr_width) { | | |
| 4858 | .p32 => @sizeOf(elf.Elf32_Sym), | | |
| 4859 | .p64 => @sizeOf(elf.Elf64_Sym), | | |
| 4860 | }; | | |
| 4861 | const needed_size = (nlocals + nglobals + 1) * sym_size; | | |
| 4862 | symtab_shdr.sh_size = needed_size; | | |
| 4863 | | | |
| 4864 | const strtab = &self.shdrs.items[self.strtab_section_index.?]; | | |
| 4865 | strtab.sh_size = strsize + 1; | | |
| 4866 | } | | |
| 4867 | | | |
| 4868 | fn writeSyntheticSections(self: *Elf) !void { | 4837 | fn writeSyntheticSections(self: *Elf) !void { |
| 4869 | const gpa = self.base.allocator; | 4838 | const gpa = self.base.allocator; |
| 4870 | | 4839 | |