ELF: Remove InputSectionBase::isLive and use Live member instead. NFC.
authorRui Ueyama <ruiu@google.com>
Wed, 24 Feb 2016 00:23:15 +0000 (00:23 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 24 Feb 2016 00:23:15 +0000 (00:23 +0000)
This is also a preparation for ICF.

llvm-svn: 261711

lld/ELF/InputSection.cpp
lld/ELF/InputSection.h
lld/ELF/OutputSections.cpp
lld/ELF/Writer.cpp

index 1bf467b..4e96fb3 100644 (file)
@@ -25,7 +25,13 @@ template <class ELFT>
 InputSectionBase<ELFT>::InputSectionBase(ObjectFile<ELFT> *File,
                                          const Elf_Shdr *Header,
                                          Kind SectionKind)
-    : Header(Header), File(File), SectionKind(SectionKind) {}
+    : Header(Header), File(File), SectionKind(SectionKind) {
+  // The garbage collector sets sections' Live bits.
+  // If GC is disabled, all sections are considered live by default.
+  // NB: "Discarded" section is initialized at start-up and when it
+  // happens Config is still null.
+  Live = Config && !Config->GcSections;
+}
 
 template <class ELFT> StringRef InputSectionBase<ELFT>::getSectionName() const {
   ErrorOr<StringRef> Name = File->getObj().getSectionName(this->Header);
index 5c5ec2a..7b98f8b 100644 (file)
@@ -44,8 +44,6 @@ public:
   OutputSectionBase<ELFT> *OutSec = nullptr;
 
   // Used for garbage collection.
-  // Live bit makes sense only when Config->GcSections is true.
-  bool isLive() const { return !Config->GcSections || Live; }
   bool Live = false;
 
   // Returns the size of this section (even if this is a common or BSS.)
index c7fd991..f2b88db 100644 (file)
@@ -885,7 +885,7 @@ elf2::getLocalRelTarget(const ObjectFile<ELFT> &File,
   // the group are not allowed. Unfortunately .eh_frame breaks that rule
   // and must be treated specially. For now we just replace the symbol with
   // 0.
-  if (Section == &InputSection<ELFT>::Discarded || !Section->isLive())
+  if (Section == &InputSection<ELFT>::Discarded || !Section->Live)
     return Addend;
 
   uintX_t Offset = Sym->st_value;
@@ -1148,7 +1148,7 @@ void EHOutputSection<ELFT>::addSectionAux(
       if (!HasReloc)
         fatal("FDE doesn't reference another section");
       InputSectionBase<ELFT> *Target = S->getRelocTarget(*RelI);
-      if (Target != &InputSection<ELFT>::Discarded && Target->isLive()) {
+      if (Target != &InputSection<ELFT>::Discarded && Target->Live) {
         uint32_t CieOffset = Offset + 4 - ID;
         auto I = OffsetToIndex.find(CieOffset);
         if (I == OffsetToIndex.end())
index 0f7edf8..9fd1bb5 100644 (file)
@@ -549,7 +549,7 @@ template <class ELFT> void Writer<ELFT>::copyLocalSymbols() {
         continue;
       if (Sym.st_shndx != SHN_ABS) {
         InputSectionBase<ELFT> *Section = F->getSection(Sym);
-        if (!Section->isLive())
+        if (!Section->Live)
           continue;
       }
       ++Out<ELFT>::SymTab->NumLocals;
@@ -744,7 +744,7 @@ StringRef Writer<ELFT>::getOutputSectionName(InputSectionBase<ELFT> *S) const {
 template <class ELFT>
 void reportDiscarded(InputSectionBase<ELFT> *IS,
                      const std::unique_ptr<ObjectFile<ELFT>> &File) {
-  if (!Config->PrintGcSections || !IS || IS->isLive())
+  if (!Config->PrintGcSections || !IS || IS->Live)
     return;
   llvm::errs() << "removing unused section from '" << IS->getSectionName()
                << "' in file '" << File->getName() << "'\n";
@@ -752,7 +752,7 @@ void reportDiscarded(InputSectionBase<ELFT> *IS,
 
 template <class ELFT>
 bool Writer<ELFT>::isDiscarded(InputSectionBase<ELFT> *S) const {
-  return !S || !S->isLive() || S == &InputSection<ELFT>::Discarded ||
+  return !S || !S->Live || S == &InputSection<ELFT>::Discarded ||
          Script->isDiscarded(S);
 }
 
@@ -786,7 +786,7 @@ template <class ELFT> static bool includeInSymtab(const SymbolBody &B) {
     if (&D->Sym == &ElfSym<ELFT>::Ignored)
       return false;
     // Exclude symbols pointing to garbage-collected sections.
-    if (D->Section && !D->Section->isLive())
+    if (D->Section && !D->Section->Live)
       return false;
   }
   return true;