authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-10-21 17:18:00-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-10-23 16:27:39-07:00
logccac11196b377bf37bed85b03bd53abfc785dc99
tree3c1b5745ae1b0d0a45845886d17179e223f63433
parent1c459032743caff33fad7d8d24471baafc0306a0

link.Elf: unstable sort for section headers

using name as tie-breaker.

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

src/link/Elf.zig+9-3
......@@ -3079,8 +3079,14 @@ pub fn sortShdrs(
30793079 };
30803080
30813081 pub fn lessThan(ctx: Context, lhs: @This(), rhs: @This()) bool {
3082 return shdrRank(ctx.shdrs[lhs.shndx], ctx.shstrtab) <
3083 shdrRank(ctx.shdrs[rhs.shndx], ctx.shstrtab);
3082 const lhs_rank = shdrRank(ctx.shdrs[lhs.shndx], ctx.shstrtab);
3083 const rhs_rank = shdrRank(ctx.shdrs[rhs.shndx], ctx.shstrtab);
3084 if (lhs_rank == rhs_rank) {
3085 const lhs_name = shString(ctx.shstrtab, ctx.shdrs[lhs.shndx].sh_name);
3086 const rhs_name = shString(ctx.shstrtab, ctx.shdrs[rhs.shndx].sh_name);
3087 return std.mem.lessThan(u8, lhs_name, rhs_name);
3088 }
3089 return lhs_rank < rhs_rank;
30843090 }
30853091 };
30863092
......@@ -3096,7 +3102,7 @@ pub fn sortShdrs(
30963102 .shdrs = shdrs,
30973103 .shstrtab = shstrtab,
30983104 };
3099 mem.sort(Entry, entries, sort_context, Entry.lessThan);
3105 mem.sortUnstable(Entry, entries, sort_context, Entry.lessThan);
31003106
31013107 const backlinks = try gpa.alloc(u32, entries.len);
31023108 defer gpa.free(backlinks);