Sort each InputSectionDescription individually.

This fixes pr36190.

Thanks to James Henderson for the testcase and for pointing out how to
fix this.

llvm-svn: 323993
This commit is contained in:
Rafael Espindola 2018-02-01 19:30:15 +00:00
parent d14dc49dff
commit 27b2990d11
2 changed files with 9 additions and 3 deletions

View File

@ -160,9 +160,9 @@ bool OutputSection::classof(const BaseCommand *C) {
void OutputSection::sort(std::function<int(InputSectionBase *S)> Order) {
assert(Live);
assert(SectionCommands.size() == 1);
sortByOrder(cast<InputSectionDescription>(SectionCommands[0])->Sections,
Order);
for (BaseCommand *B : SectionCommands)
if (auto *ISD = dyn_cast<InputSectionDescription>(B))
sortByOrder(ISD->Sections, Order);
}
// Fill [Buf, Buf + Size) with Filler.

View File

@ -18,6 +18,12 @@
# RUN: ld.lld --symbol-ordering-file %t.ord %t.o --script %t2.script -o %t3.out
# RUN: llvm-objdump -s %t3.out| FileCheck %s --check-prefix=AFTER
# RUN: echo "SECTIONS { .foo : { BYTE(0x33); *(.foo); BYTE(0x44) } }" > %t3.script
# RUN: ld.lld --symbol-ordering-file %t.ord %t.o --script %t3.script -o %t4.out
# RUN: llvm-objdump -s %t4.out| FileCheck %s --check-prefix=COMMANDS
# COMMANDS: Contents of section .foo:
# COMMANDS-NEXT: 33221144
.section .foo,"ax",@progbits,unique,1
_foo1:
.byte 0x11