authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:35:37+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-04-20 23:36:42+02:00
logbc46a4d51e8e95a0c0b9b7766c240d5d9d774941
treec4ececad09df3cc1c38299cfc2d80fbfb85d962a
parent66253e5b5152c6fa59e285badd13250e05de47bb

link/elf: create .comment section for build-lib and no-llvm


2 files changed, 9 insertions(+), 19 deletions(-)

src/link/Elf.zig+3
......@@ -1342,6 +1342,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, prog_node: *std.Progress.Node)
13421342 try self.addCommentString();
13431343 try self.finalizeMergeSections();
13441344 try self.initOutputSections();
1345 try self.initMergeSections();
13451346 try self.addLinkerDefinedSymbols();
13461347 self.claimUnresolved();
13471348
......@@ -3419,7 +3420,9 @@ fn initOutputSections(self: *Elf) !void {
34193420 for (self.objects.items) |index| {
34203421 try self.file(index).?.object.initOutputSections(self);
34213422 }
3423}
34223424
3425pub fn initMergeSections(self: *Elf) !void {
34233426 for (self.merge_sections.items) |*msec| {
34243427 if (msec.subsections.items.len == 0) continue;
34253428 const name = msec.name(self);
src/link/Elf/relocatable.zig+6-19
......@@ -34,12 +34,16 @@ pub fn flushStaticLib(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]co
3434 // First, we flush relocatable object file generated with our backends.
3535 if (elf_file.zigObjectPtr()) |zig_object| {
3636 zig_object.resolveSymbols(elf_file);
37 try elf_file.addCommentString();
38 try elf_file.finalizeMergeSections();
3739 zig_object.claimUnresolvedObject(elf_file);
3840
41 try elf_file.initMergeSections();
3942 try elf_file.initSymtab();
4043 try elf_file.initShStrtab();
4144 try elf_file.sortShdrs();
4245 try zig_object.addAtomsToRelaSections(elf_file);
46 try elf_file.updateMergeSectionSizes();
4347 try updateSectionSizes(elf_file);
4448
4549 try allocateAllocSections(elf_file);
......@@ -49,6 +53,7 @@ pub fn flushStaticLib(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]co
4953 state_log.debug("{}", .{elf_file.dumpState()});
5054 }
5155
56 try elf_file.writeMergeSections();
5257 try writeSyntheticSections(elf_file);
5358 try elf_file.writeShdrTable();
5459 try elf_file.writeElfHeader();
......@@ -185,6 +190,7 @@ pub fn flushObject(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]const
185190 claimUnresolved(elf_file);
186191
187192 try initSections(elf_file);
193 try elf_file.initMergeSections();
188194 try elf_file.sortShdrs();
189195 if (elf_file.zigObjectPtr()) |zig_object| {
190196 try zig_object.addAtomsToRelaSections(elf_file);
......@@ -280,25 +286,6 @@ fn initSections(elf_file: *Elf) !void {
280286 try object.initRelaSections(elf_file);
281287 }
282288
283 for (elf_file.merge_sections.items) |*msec| {
284 if (msec.subsections.items.len == 0) continue;
285 const name = msec.name(elf_file);
286 const shndx = elf_file.sectionByName(name) orelse try elf_file.addSection(.{
287 .name = name,
288 .type = msec.type,
289 .flags = msec.flags,
290 });
291 msec.output_section_index = shndx;
292
293 var entsize = elf_file.mergeSubsection(msec.subsections.items[0]).entsize;
294 for (msec.subsections.items) |index| {
295 const msub = elf_file.mergeSubsection(index);
296 entsize = @min(entsize, msub.entsize);
297 }
298 const shdr = &elf_file.shdrs.items[shndx];
299 shdr.sh_entsize = entsize;
300 }
301
302289 const needs_eh_frame = for (elf_file.objects.items) |index| {
303290 if (elf_file.file(index).?.object.cies.items.len > 0) break true;
304291 } else false;