forked from OSchip/llvm-project
[ELF] - Refactor of LinkerScript<ELFT>::getPhdrIndicesForSection
Previously it was harder to read and also has a error: command kind was not checked. Differential revision: https://reviews.llvm.org/D22574 llvm-svn: 276137
This commit is contained in:
parent
db80c0c77f
commit
31d842f55f
|
@ -450,23 +450,23 @@ template <class ELFT> bool LinkerScript<ELFT>::hasPhdrsCommands() {
|
|||
template <class ELFT>
|
||||
std::vector<size_t>
|
||||
LinkerScript<ELFT>::getPhdrIndicesForSection(StringRef Name) {
|
||||
std::vector<size_t> Indices;
|
||||
auto ItSect = std::find_if(
|
||||
Opt.Commands.begin(), Opt.Commands.end(),
|
||||
[Name](const SectionsCommand &Cmd) { return Cmd.Name == Name; });
|
||||
if (ItSect != Opt.Commands.end()) {
|
||||
SectionsCommand &SecCmd = (*ItSect);
|
||||
for (StringRef PhdrName : SecCmd.Phdrs) {
|
||||
auto ItPhdr = std::find_if(
|
||||
Opt.PhdrsCommands.rbegin(), Opt.PhdrsCommands.rend(),
|
||||
[PhdrName](PhdrsCommand &Cmd) { return Cmd.Name == PhdrName; });
|
||||
for (SectionsCommand &Cmd : Opt.Commands) {
|
||||
if (Cmd.Kind != SectionKind || Cmd.Name != Name)
|
||||
continue;
|
||||
|
||||
std::vector<size_t> Indices;
|
||||
for (StringRef PhdrName : Cmd.Phdrs) {
|
||||
auto ItPhdr =
|
||||
std::find_if(Opt.PhdrsCommands.rbegin(), Opt.PhdrsCommands.rend(),
|
||||
[&](PhdrsCommand &Cmd) { return Cmd.Name == PhdrName; });
|
||||
if (ItPhdr == Opt.PhdrsCommands.rend())
|
||||
error("section header '" + PhdrName + "' is not listed in PHDRS");
|
||||
else
|
||||
Indices.push_back(std::distance(ItPhdr, Opt.PhdrsCommands.rend()) - 1);
|
||||
}
|
||||
return Indices;
|
||||
}
|
||||
return Indices;
|
||||
return {};
|
||||
}
|
||||
|
||||
class elf::ScriptParser : public ScriptParserBase {
|
||||
|
|
Loading…
Reference in New Issue