diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-07-27 14:10:56 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-07-27 14:10:56 +0000 |
| commit | 0b113671c5ca6425193fe7e65c5538aa9fc5c3d2 (patch) | |
| tree | e12347dcd1ac96f3438c381ffe0f505ef34ad61d | |
| parent | c5537427c2e035f8383c1611676f007fa4d0711f (diff) | |
| download | bcm5719-llvm-0b113671c5ca6425193fe7e65c5538aa9fc5c3d2.tar.gz bcm5719-llvm-0b113671c5ca6425193fe7e65c5538aa9fc5c3d2.zip | |
Make toPhdrFlags a member function. NFC.
llvm-svn: 276868
| -rw-r--r-- | lld/ELF/LinkerScript.cpp | 8 | ||||
| -rw-r--r-- | lld/ELF/OutputSections.cpp | 10 | ||||
| -rw-r--r-- | lld/ELF/OutputSections.h | 1 | ||||
| -rw-r--r-- | lld/ELF/Writer.cpp | 18 | ||||
| -rw-r--r-- | lld/ELF/Writer.h | 1 |
5 files changed, 19 insertions, 19 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index 804d0c94e12..0c54de24fae 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -281,13 +281,13 @@ LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) { break; case PT_DYNAMIC: if (isOutputDynamic<ELFT>()) { - Phdr.H.p_flags = toPhdrFlags(Out<ELFT>::Dynamic->getFlags()); + Phdr.H.p_flags = Out<ELFT>::Dynamic->getPhdrFlags(); Phdr.add(Out<ELFT>::Dynamic); } break; case PT_GNU_EH_FRAME: if (!Out<ELFT>::EhFrame->empty() && Out<ELFT>::EhFrameHdr) { - Phdr.H.p_flags = toPhdrFlags(Out<ELFT>::EhFrameHdr->getFlags()); + Phdr.H.p_flags = Out<ELFT>::EhFrameHdr->getPhdrFlags(); Phdr.add(Out<ELFT>::EhFrameHdr); } break; @@ -306,12 +306,12 @@ LinkerScript<ELFT>::createPhdrs(ArrayRef<OutputSectionBase<ELFT> *> Sections) { for (size_t Id : PhdrIds) { Ret[Id].add(Sec); if (Opt.PhdrsCommands[Id].Flags == UINT_MAX) - Ret[Id].H.p_flags |= toPhdrFlags(Sec->getFlags()); + Ret[Id].H.p_flags |= Sec->getPhdrFlags(); } } else { // If we have no load segment or flags've changed then we want new load // segment. - uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); + uintX_t NewFlags = Sec->getPhdrFlags(); if (Load == nullptr || Flags != NewFlags) { Load = &*Ret.emplace(Ret.end(), PT_LOAD, NewFlags); Flags = NewFlags; diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 34e5685e528..b06b1b5d176 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -40,6 +40,16 @@ OutputSectionBase<ELFT>::OutputSectionBase(StringRef Name, uint32_t Type, Header.sh_addralign = 1; } +template <class ELFT> uint32_t OutputSectionBase<ELFT>::getPhdrFlags() const { + uintX_t Flags = getFlags(); + uint32_t Ret = PF_R; + if (Flags & SHF_WRITE) + Ret |= PF_W; + if (Flags & SHF_EXECINSTR) + Ret |= PF_X; + return Ret; +} + template <class ELFT> void OutputSectionBase<ELFT>::writeHeaderTo(Elf_Shdr *Shdr) { *Shdr = Header; diff --git a/lld/ELF/OutputSections.h b/lld/ELF/OutputSections.h index bf6f2083f2e..4b40e78018f 100644 --- a/lld/ELF/OutputSections.h +++ b/lld/ELF/OutputSections.h @@ -65,6 +65,7 @@ public: uintX_t getSize() const { return Header.sh_size; } void setSize(uintX_t Val) { Header.sh_size = Val; } uintX_t getFlags() const { return Header.sh_flags; } + uint32_t getPhdrFlags() const; uintX_t getFileOff() const { return Header.sh_offset; } uintX_t getAlignment() const { return Header.sh_addralign; } uint32_t getType() const { return Header.sh_type; } diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 540be8c54a4..99d9323d9d2 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -467,15 +467,6 @@ static bool compareSections(OutputSectionBase<ELFT> *A, return false; } -uint32_t elf::toPhdrFlags(uint64_t Flags) { - uint32_t Ret = PF_R; - if (Flags & SHF_WRITE) - Ret |= PF_W; - if (Flags & SHF_EXECINSTR) - Ret |= PF_X; - return Ret; -} - template <class ELFT> bool elf::isOutputDynamic() { return !Symtab<ELFT>::X->getSharedFiles().empty() || Config->Pic; } @@ -959,7 +950,7 @@ std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { // PT_INTERP must be the second entry if exists. if (Out<ELFT>::Interp) { - Phdr &Hdr = *AddHdr(PT_INTERP, toPhdrFlags(Out<ELFT>::Interp->getFlags())); + Phdr &Hdr = *AddHdr(PT_INTERP, Out<ELFT>::Interp->getPhdrFlags()); Hdr.add(Out<ELFT>::Interp); } @@ -986,7 +977,7 @@ std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { continue; // If flags changed then we want new load segment. - uintX_t NewFlags = toPhdrFlags(Sec->getFlags()); + uintX_t NewFlags = Sec->getPhdrFlags(); if (Flags != NewFlags) { Load = AddHdr(PT_LOAD, NewFlags); Flags = NewFlags; @@ -1006,7 +997,7 @@ std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { // Add an entry for .dynamic. if (isOutputDynamic<ELFT>()) { - Phdr &H = *AddHdr(PT_DYNAMIC, toPhdrFlags(Out<ELFT>::Dynamic->getFlags())); + Phdr &H = *AddHdr(PT_DYNAMIC, Out<ELFT>::Dynamic->getPhdrFlags()); H.add(Out<ELFT>::Dynamic); } @@ -1017,8 +1008,7 @@ std::vector<PhdrEntry<ELFT>> Writer<ELFT>::createPhdrs() { // PT_GNU_EH_FRAME is a special section pointing on .eh_frame_hdr. if (!Out<ELFT>::EhFrame->empty() && Out<ELFT>::EhFrameHdr) { - Phdr &Hdr = *AddHdr(PT_GNU_EH_FRAME, - toPhdrFlags(Out<ELFT>::EhFrameHdr->getFlags())); + Phdr &Hdr = *AddHdr(PT_GNU_EH_FRAME, Out<ELFT>::EhFrameHdr->getPhdrFlags()); Hdr.add(Out<ELFT>::EhFrameHdr); } diff --git a/lld/ELF/Writer.h b/lld/ELF/Writer.h index f9c8b632200..9e6e3671c40 100644 --- a/lld/ELF/Writer.h +++ b/lld/ELF/Writer.h @@ -27,7 +27,6 @@ template <class ELFT> void writeResult(SymbolTable<ELFT> *Symtab); template <class ELFT> void markLive(); template <class ELFT> bool isOutputDynamic(); template <class ELFT> bool isRelroSection(OutputSectionBase<ELFT> *Sec); -uint32_t toPhdrFlags(uint64_t Flags); // This describes a program header entry. // Each contains type, access flags and range of output sections that will be |

