authorgravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-10-23 02:11:17+01:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2026-10-25 00:21:55+01:00
log1cdcac604f5408f06689c6c9866aef355d1b2f72
tree6a83d6d7afa8cbc9d4bdafc75f90a431378910a6
parentd74e9a786f96af052065c0d3a6c22ab38e9b697f
signature Commit is signed but in an unrecognized format.

Elf2: fix a performance issue


1 files changed, 9 insertions(+), 5 deletions(-)

src/link/Elf2.zig+9-5
......@@ -8100,11 +8100,15 @@ fn loadObject(
81008100 if (opts.node_fixed) ni: {
81018101 const shndx_ni = opts.shndx.node(elf);
81028102 const after_oni: MappedFile.Node.Index.Optional = after: {
8103 const last_ni = shndx_ni.last(&elf.mf).unwrap() orelse break :after .none;
8104 break :after switch (last_ni.position(&elf.mf)) {
8105 .header => .wrap(last_ni),
8106 .footer, .floating => .none,
8107 };
8103 var node_it = shndx_ni.last(&elf.mf);
8104 while (node_it.unwrap()) |cur_ni| {
8105 switch (cur_ni.position(&elf.mf)) {
8106 .header => break :after .wrap(cur_ni), // last header
8107 .footer, .floating => node_it = cur_ni.prev(&elf.mf),
8108 }
8109 } else {
8110 break :after .none;
8111 }
81088112 };
81098113 break :ni try shndx_ni.addHeaderChildAfter(gpa, &elf.mf, after_oni, add_node_opts);
81108114 } else try opts.shndx.node(elf).addFloatingChild(gpa, &elf.mf, add_node_opts),