Make toPhdrFlags a member function. NFC.
llvm-svn: 276868
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp
index 804d0c9..0c54de2 100644
--- a/lld/ELF/LinkerScript.cpp
+++ b/lld/ELF/LinkerScript.cpp
@@ -281,13 +281,13 @@
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 @@
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 34e5685..b06b1b5 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -40,6 +40,16 @@
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 bf6f208..4b40e78 100644
--- a/lld/ELF/OutputSections.h
+++ b/lld/ELF/OutputSections.h
@@ -65,6 +65,7 @@
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 540be8c..99d9323 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -467,15 +467,6 @@
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 @@
// 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 @@
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 @@
// 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 @@
// 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 f9c8b63..9e6e367 100644
--- a/lld/ELF/Writer.h
+++ b/lld/ELF/Writer.h
@@ -27,7 +27,6 @@
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