Index: ELF/OutputSections.cpp =================================================================== --- ELF/OutputSections.cpp +++ ELF/OutputSections.cpp @@ -273,8 +273,8 @@ template static void finalizeShtGroup(OutputSection *OS, - ArrayRef Sections) { - assert(Config->Relocatable && Sections.size() == 1); + InputSection *Section) { + assert(Config->Relocatable); // sh_link field for SHT_GROUP sections should contain the section index of // the symbol table. @@ -282,38 +282,38 @@ // sh_info then contain index of an entry in symbol table section which // provides signature of the section group. - ObjFile *Obj = Sections[0]->getFile(); + ObjFile *Obj = Section->getFile(); ArrayRef Symbols = Obj->getSymbols(); - OS->Info = InX::SymTab->getSymbolIndex(Symbols[Sections[0]->Info]); + OS->Info = InX::SymTab->getSymbolIndex(Symbols[Section->Info]); } template void OutputSection::finalize() { - std::vector Sections; - for (BaseCommand *Base : SectionCommands) { + InputSection *First = nullptr; + for (BaseCommand *Base : SectionCommands) if (auto *ISD = dyn_cast(Base)) { - for (InputSection *&IS : ISD->Sections) - Sections.push_back(IS); + if (ISD->Sections.empty()) + continue; + First = ISD->Sections.front(); + break; } - } if (Flags & SHF_LINK_ORDER) { // We must preserve the link order dependency of sections with the // SHF_LINK_ORDER flag. The dependency is indicated by the sh_link field. We // need to translate the InputSection sh_link to the OutputSection sh_link, // all InputSections in the OutputSection have the same dependency. - if (auto *D = Sections.front()->getLinkOrderDep()) + if (auto *D = First->getLinkOrderDep()) Link = D->getParent()->SectionIndex; } if (Type == SHT_GROUP) { - finalizeShtGroup(this, Sections); + finalizeShtGroup(this, First); return; } if (!Config->CopyRelocs || (Type != SHT_RELA && Type != SHT_REL)) return; - InputSection *First = Sections[0]; if (isa(First)) return;