diff options
| author | Rui Ueyama <ruiu@google.com> | 2016-07-24 23:47:31 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2016-07-24 23:47:31 +0000 |
| commit | edebbdf12aadcc20a561167d388ee5f4387845ec (patch) | |
| tree | ac3fb073aa62166557c0dfb5be61a2d139a167c7 | |
| parent | 16629519740e6ba198b83273b50c1c010eb4a829 (diff) | |
| download | bcm5719-llvm-edebbdf12aadcc20a561167d388ee5f4387845ec.tar.gz bcm5719-llvm-edebbdf12aadcc20a561167d388ee5f4387845ec.zip | |
Simplify. NFC.
llvm-svn: 276586
| -rw-r--r-- | lld/ELF/LinkerScript.cpp | 50 | ||||
| -rw-r--r-- | lld/ELF/LinkerScript.h | 2 |
2 files changed, 25 insertions, 27 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index 2ddfd9c526a..aacb5d8d7fa 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -224,16 +224,14 @@ void LinkerScript<ELFT>::assignAddresses( template <class ELFT> std::vector<PhdrEntry<ELFT>> LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) { - int TlsNum = -1; - int NoteNum = -1; - int RelroNum = -1; - PhdrEntry<ELFT> *Load = nullptr; - uintX_t Flags = PF_R; - std::vector<PhdrEntry<ELFT>> Phdrs; + std::vector<PhdrEntry<ELFT>> Ret; + PhdrEntry<ELFT> *TlsPhdr = nullptr; + PhdrEntry<ELFT> *NotePhdr = nullptr; + PhdrEntry<ELFT> *RelroPhdr = nullptr; for (const PhdrsCommand &Cmd : Opt.PhdrsCommands) { - Phdrs.emplace_back(Cmd.Type, Cmd.Flags == UINT_MAX ? PF_R : Cmd.Flags); - PhdrEntry<ELFT> &Phdr = Phdrs.back(); + Ret.emplace_back(Cmd.Type, Cmd.Flags == UINT_MAX ? PF_R : Cmd.Flags); + PhdrEntry<ELFT> &Phdr = Ret.back(); if (Cmd.HasFilehdr) Phdr.add(Out<ELFT>::ElfHeader); @@ -252,13 +250,13 @@ LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) { } break; case PT_TLS: - TlsNum = Phdrs.size() - 1; + TlsPhdr = &Phdr; break; case PT_NOTE: - NoteNum = Phdrs.size() - 1; + NotePhdr = &Phdr; break; case PT_GNU_RELRO: - RelroNum = Phdrs.size() - 1; + RelroPhdr = &Phdr; break; case PT_GNU_EH_FRAME: if (!Out<ELFT>::EhFrame->empty() && Out<ELFT>::EhFrameHdr) { @@ -269,42 +267,43 @@ LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) { } } + PhdrEntry<ELFT> *Load = nullptr; + uintX_t Flags = PF_R; for (OutputSectionBase<ELFT> *Sec : Sections) { if (!(Sec->getFlags() & SHF_ALLOC)) break; - if (TlsNum != -1 && (Sec->getFlags() & SHF_TLS)) - Phdrs[TlsNum].add(Sec); + if (TlsPhdr && (Sec->getFlags() & SHF_TLS)) + TlsPhdr->add(Sec); if (!needsPtLoad<ELFT>(Sec)) continue; - const std::vector<size_t> &PhdrIds = - getPhdrIndicesForSection(Sec->getName()); + std::vector<size_t> PhdrIds = getPhdrIndices(Sec->getName()); if (!PhdrIds.empty()) { // Assign headers specified by linker script for (size_t Id : PhdrIds) { - Phdrs[Id].add(Sec); + Ret[Id].add(Sec); if (Opt.PhdrsCommands[Id].Flags == UINT_MAX) - Phdrs[Id].H.p_flags |= toPhdrFlags(Sec->getFlags()); + Ret[Id].H.p_flags |= toPhdrFlags(Sec->getFlags()); } } else { // If we have no load segment or flags've changed then we want new load // segment. uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); if (Load == nullptr || Flags != NewFlags) { - Load = &*Phdrs.emplace(Phdrs.end(), PT_LOAD, NewFlags); + Load = &*Ret.emplace(Ret.end(), PT_LOAD, NewFlags); Flags = NewFlags; } Load->add(Sec); } - if (RelroNum != -1 && isRelroSection(Sec)) - Phdrs[RelroNum].add(Sec); - if (NoteNum != -1 && Sec->getType() == SHT_NOTE) - Phdrs[NoteNum].add(Sec); + if (RelroPhdr && isRelroSection(Sec)) + RelroPhdr->add(Sec); + if (NotePhdr && Sec->getType() == SHT_NOTE) + NotePhdr->add(Sec); } - return Phdrs; + return Ret; } template <class ELFT> @@ -369,11 +368,10 @@ template <class ELFT> bool LinkerScript<ELFT>::hasPhdrsCommands() { // by Name. Each index is a zero based number of ELF header listed within // PHDRS {} script block. template <class ELFT> -std::vector<size_t> -LinkerScript<ELFT>::getPhdrIndicesForSection(StringRef Name) { +std::vector<size_t> LinkerScript<ELFT>::getPhdrIndices(StringRef SectionName) { for (const std::unique_ptr<BaseCommand> &Base : Opt.Commands) { auto *Cmd = dyn_cast<OutputSectionCommand>(Base.get()); - if (!Cmd || Cmd->Name != Name) + if (!Cmd || Cmd->Name != SectionName) continue; std::vector<size_t> Indices; diff --git a/lld/ELF/LinkerScript.h b/lld/ELF/LinkerScript.h index 48fb2b5ea29..37b6a031a5d 100644 --- a/lld/ELF/LinkerScript.h +++ b/lld/ELF/LinkerScript.h @@ -134,7 +134,7 @@ private: ScriptConfiguration &Opt = *ScriptConfig; int getSectionIndex(StringRef Name); - std::vector<size_t> getPhdrIndicesForSection(StringRef Name); + std::vector<size_t> getPhdrIndices(StringRef SectionName); void dispatchAssignment(SymbolAssignment *Cmd); uintX_t Dot; |

