| ... | @@ -3079,8 +3079,14 @@ pub fn sortShdrs( | ... | @@ -3079,8 +3079,14 @@ pub fn sortShdrs( |
| 3079 | }; | 3079 | }; |
| 3080 | | 3080 | |
| 3081 | pub fn lessThan(ctx: Context, lhs: @This(), rhs: @This()) bool { | 3081 | pub fn lessThan(ctx: Context, lhs: @This(), rhs: @This()) bool { |
| 3082 | return shdrRank(ctx.shdrs[lhs.shndx], ctx.shstrtab) < | 3082 | const lhs_rank = shdrRank(ctx.shdrs[lhs.shndx], ctx.shstrtab); |
| 3083 | shdrRank(ctx.shdrs[rhs.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; |
| 3084 | } | 3090 | } |
| 3085 | }; | 3091 | }; |
| 3086 | | 3092 | |
| ... | @@ -3096,7 +3102,7 @@ pub fn sortShdrs( | ... | @@ -3096,7 +3102,7 @@ pub fn sortShdrs( |
| 3096 | .shdrs = shdrs, | 3102 | .shdrs = shdrs, |
| 3097 | .shstrtab = shstrtab, | 3103 | .shstrtab = shstrtab, |
| 3098 | }; | 3104 | }; |
| 3099 | mem.sort(Entry, entries, sort_context, Entry.lessThan); | 3105 | mem.sortUnstable(Entry, entries, sort_context, Entry.lessThan); |
| 3100 | | 3106 | |
| 3101 | const backlinks = try gpa.alloc(u32, entries.len); | 3107 | const backlinks = try gpa.alloc(u32, entries.len); |
| 3102 | defer gpa.free(backlinks); | 3108 | defer gpa.free(backlinks); |