From bc46a4d51e8e95a0c0b9b7766c240d5d9d774941 Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Sat, 20 Apr 2024 23:35:37 +0200 Subject: [PATCH] link/elf: create .comment section for build-lib and no-llvm --- src/link/Elf.zig | 3 +++ src/link/Elf/relocatable.zig | 25 ++++++------------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 473e1ab76a..c182e7ab3e 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1342,6 +1342,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, prog_node: *std.Progress.Node) try self.addCommentString(); try self.finalizeMergeSections(); try self.initOutputSections(); + try self.initMergeSections(); try self.addLinkerDefinedSymbols(); self.claimUnresolved(); @@ -3419,7 +3420,9 @@ fn initOutputSections(self: *Elf) !void { for (self.objects.items) |index| { try self.file(index).?.object.initOutputSections(self); } +} +pub fn initMergeSections(self: *Elf) !void { for (self.merge_sections.items) |*msec| { if (msec.subsections.items.len == 0) continue; const name = msec.name(self); diff --git a/src/link/Elf/relocatable.zig b/src/link/Elf/relocatable.zig index e1e87ce8af..c70faba020 100644 --- a/src/link/Elf/relocatable.zig +++ b/src/link/Elf/relocatable.zig @@ -34,12 +34,16 @@ pub fn flushStaticLib(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]co // First, we flush relocatable object file generated with our backends. if (elf_file.zigObjectPtr()) |zig_object| { zig_object.resolveSymbols(elf_file); + try elf_file.addCommentString(); + try elf_file.finalizeMergeSections(); zig_object.claimUnresolvedObject(elf_file); + try elf_file.initMergeSections(); try elf_file.initSymtab(); try elf_file.initShStrtab(); try elf_file.sortShdrs(); try zig_object.addAtomsToRelaSections(elf_file); + try elf_file.updateMergeSectionSizes(); try updateSectionSizes(elf_file); try allocateAllocSections(elf_file); @@ -49,6 +53,7 @@ pub fn flushStaticLib(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]co state_log.debug("{}", .{elf_file.dumpState()}); } + try elf_file.writeMergeSections(); try writeSyntheticSections(elf_file); try elf_file.writeShdrTable(); try elf_file.writeElfHeader(); @@ -185,6 +190,7 @@ pub fn flushObject(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]const claimUnresolved(elf_file); try initSections(elf_file); + try elf_file.initMergeSections(); try elf_file.sortShdrs(); if (elf_file.zigObjectPtr()) |zig_object| { try zig_object.addAtomsToRelaSections(elf_file); @@ -280,25 +286,6 @@ fn initSections(elf_file: *Elf) !void { try object.initRelaSections(elf_file); } - for (elf_file.merge_sections.items) |*msec| { - if (msec.subsections.items.len == 0) continue; - const name = msec.name(elf_file); - const shndx = elf_file.sectionByName(name) orelse try elf_file.addSection(.{ - .name = name, - .type = msec.type, - .flags = msec.flags, - }); - msec.output_section_index = shndx; - - var entsize = elf_file.mergeSubsection(msec.subsections.items[0]).entsize; - for (msec.subsections.items) |index| { - const msub = elf_file.mergeSubsection(index); - entsize = @min(entsize, msub.entsize); - } - const shdr = &elf_file.shdrs.items[shndx]; - shdr.sh_entsize = entsize; - } - const needs_eh_frame = for (elf_file.objects.items) |index| { if (elf_file.file(index).?.object.cies.items.len > 0) break true; } else false;