diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 75df1c254f99..59fc5bd4bd3f 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -160,9 +160,9 @@ bool OutputSection::classof(const BaseCommand *C) { void OutputSection::sort(std::function Order) { assert(Live); - assert(SectionCommands.size() == 1); - sortByOrder(cast(SectionCommands[0])->Sections, - Order); + for (BaseCommand *B : SectionCommands) + if (auto *ISD = dyn_cast(B)) + sortByOrder(ISD->Sections, Order); } // Fill [Buf, Buf + Size) with Filler. diff --git a/lld/test/ELF/linkerscript/symbol-ordering-file.s b/lld/test/ELF/linkerscript/symbol-ordering-file.s index b458cde2613c..dd5e0a152ae9 100644 --- a/lld/test/ELF/linkerscript/symbol-ordering-file.s +++ b/lld/test/ELF/linkerscript/symbol-ordering-file.s @@ -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