[lld] r286261 - Don't add null and discarded sections to the global list.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 8 11:41:01 PST 2016
Thanks! This is a nice change. I wonder if we could remove dead sections
from the list as well. This will remove all "S->Live" checks, but it might
slows it down a little bit because we have to shift section pointers in the
vector.
On Tue, Nov 8, 2016 at 10:23 AM, Rafael Espindola via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: rafael
> Date: Tue Nov 8 12:23:02 2016
> New Revision: 286261
>
> URL: http://llvm.org/viewvc/llvm-project?rev=286261&view=rev
> Log:
> Don't add null and discarded sections to the global list.
>
> Avoids having to skip them multiple times.
>
> Modified:
> lld/trunk/ELF/Driver.cpp
> lld/trunk/ELF/ICF.cpp
> lld/trunk/ELF/LinkerScript.cpp
> lld/trunk/ELF/MarkLive.cpp
> lld/trunk/ELF/Writer.cpp
>
> Modified: lld/trunk/ELF/Driver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.
> cpp?rev=286261&r1=286260&r2=286261&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/Driver.cpp (original)
> +++ lld/trunk/ELF/Driver.cpp Tue Nov 8 12:23:02 2016
> @@ -761,7 +761,8 @@ template <class ELFT> void LinkerDriver:
> // Aggregate all input sections into one place.
> for (elf::ObjectFile<ELFT> *F : Symtab.getObjectFiles())
> for (InputSectionBase<ELFT> *S : F->getSections())
> - Symtab.Sections.push_back(S);
> + if (S && S != &InputSection<ELFT>::Discarded)
> + Symtab.Sections.push_back(S);
> for (BinaryFile *F : Symtab.getBinaryFiles())
> for (InputSectionData *S : F->getSections())
> Symtab.Sections.push_back(cast<InputSection<ELFT>>(S));
> @@ -775,7 +776,7 @@ template <class ELFT> void LinkerDriver:
> // MergeInputSection::splitIntoPieces needs to be called before
> // any call of MergeInputSection::getOffset. Do that.
> for (InputSectionBase<ELFT> *S : Symtab.Sections) {
> - if (!S || S == &InputSection<ELFT>::Discarded || !S->Live)
> + if (!S->Live)
> continue;
> if (S->Compressed)
> S->uncompress();
>
> Modified: lld/trunk/ELF/ICF.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ICF.cpp?
> rev=286261&r1=286260&r2=286261&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/ICF.cpp (original)
> +++ lld/trunk/ELF/ICF.cpp Tue Nov 8 12:23:02 2016
> @@ -128,7 +128,7 @@ template <class ELFT> uint64_t ICF<ELFT>
>
> // Returns true if Sec is subject of ICF.
> template <class ELFT> bool ICF<ELFT>::isEligible(InputSectionBase<ELFT>
> *Sec) {
> - if (!Sec || Sec == &InputSection<ELFT>::Discarded || !Sec->Live)
> + if (!Sec->Live)
> return false;
> auto *S = dyn_cast<InputSection<ELFT>>(Sec);
> if (!S)
>
> Modified: lld/trunk/ELF/LinkerScript.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> LinkerScript.cpp?rev=286261&r1=286260&r2=286261&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/LinkerScript.cpp (original)
> +++ lld/trunk/ELF/LinkerScript.cpp Tue Nov 8 12:23:02 2016
> @@ -117,10 +117,6 @@ bool BytesDataCommand::classof(const Bas
> return C->Kind == BytesDataKind;
> }
>
> -template <class ELFT> static bool isDiscarded(InputSectionBase<ELFT> *S)
> {
> - return !S || !S->Live;
> -}
> -
> template <class ELFT> LinkerScript<ELFT>::LinkerScript() = default;
> template <class ELFT> LinkerScript<ELFT>::~LinkerScript() = default;
>
> @@ -195,7 +191,7 @@ void LinkerScript<ELFT>::computeInputSec
> size_t SizeBefore = I->Sections.size();
>
> for (InputSectionBase<ELFT> *S : Symtab<ELFT>::X->Sections) {
> - if (isDiscarded(S) || S->OutSec)
> + if (!S->Live || S->OutSec)
> continue;
>
> StringRef Filename;
> @@ -368,7 +364,7 @@ void LinkerScript<ELFT>::createSections(
>
> // Add orphan sections.
> for (InputSectionBase<ELFT> *S : Symtab<ELFT>::X->Sections)
> - if (!isDiscarded(S) && !S->OutSec)
> + if (S->Live && !S->OutSec)
> addSection(Factory, S, getOutputSectionName(S->Name));
> }
>
>
> Modified: lld/trunk/ELF/MarkLive.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/
> MarkLive.cpp?rev=286261&r1=286260&r2=286261&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/MarkLive.cpp (original)
> +++ lld/trunk/ELF/MarkLive.cpp Tue Nov 8 12:23:02 2016
> @@ -239,8 +239,6 @@ template <class ELFT> void elf::markLive
> // Preserve special sections and those which are specified in linker
> // script KEEP command.
> for (InputSectionBase<ELFT> *Sec : Symtab<ELFT>::X->Sections) {
> - if (!Sec || Sec == &InputSection<ELFT>::Discarded)
> - continue;
> // .eh_frame is always marked as live now, but also it can reference
> to
> // sections that contain personality. We preserve all non-text
> sections
> // referred by .eh_frame here.
>
> Modified: lld/trunk/ELF/Writer.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.
> cpp?rev=286261&r1=286260&r2=286261&view=diff
> ============================================================
> ==================
> --- lld/trunk/ELF/Writer.cpp (original)
> +++ lld/trunk/ELF/Writer.cpp Tue Nov 8 12:23:02 2016
> @@ -118,8 +118,7 @@ StringRef elf::getOutputSectionName(Stri
> }
>
> template <class ELFT> void elf::reportDiscarded(InputSectionBase<ELFT>
> *IS) {
> - if (!Config->PrintGcSections || !IS || IS ==
> &InputSection<ELFT>::Discarded ||
> - IS->Live)
> + if (!Config->PrintGcSections)
> return;
> errs() << "removing unused section from '" << IS->Name << "' in file '"
> << IS->getFile()->getName() << "'\n";
> @@ -512,10 +511,6 @@ static bool compareSections(const Output
> return compareSectionsNonScript(A, B);
> }
>
> -template <class ELFT> static bool isDiscarded(InputSectionBase<ELFT> *S)
> {
> - return !S || S == &InputSection<ELFT>::Discarded || !S->Live;
> -}
> -
> // Program header entry
> template <class ELFT>
> PhdrEntry<ELFT>::PhdrEntry(unsigned Type, unsigned Flags) {
> @@ -653,7 +648,7 @@ void Writer<ELFT>::forEachRelSec(
> std::function<void(InputSectionBase<ELFT> &, const typename
> ELFT::Shdr &)>
> Fn) {
> for (InputSectionBase<ELFT> *IS : Symtab<ELFT>::X->Sections) {
> - if (isDiscarded(IS))
> + if (!IS->Live)
> continue;
> // Scan all relocations. Each relocation goes through a series
> // of tests to determine if it needs special treatment, such as
> @@ -675,7 +670,7 @@ void Writer<ELFT>::forEachRelSec(
>
> template <class ELFT>
> void Writer<ELFT>::addInputSec(InputSectionBase<ELFT> *IS) {
> - if (isDiscarded(IS)) {
> + if (!IS->Live) {
> reportDiscarded(IS);
> return;
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161108/3a9a2193/attachment.html>
More information about the llvm-commits
mailing list