diff options
| -rw-r--r-- | lld/ELF/LTO.cpp | 6 | ||||
| -rw-r--r-- | lld/ELF/OutputSections.cpp | 2 | ||||
| -rw-r--r-- | lld/ELF/SymbolTable.cpp | 2 | ||||
| -rw-r--r-- | lld/ELF/Symbols.cpp | 12 | ||||
| -rw-r--r-- | lld/ELF/Symbols.h | 25 | 
5 files changed, 16 insertions, 31 deletions
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index af873c6dd7c..f24327a139a 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -201,8 +201,10 @@ void BitcodeCompiler::add(BitcodeFile &F) {        handleUndefinedAsmRefs(Sym, GV, AsmUndefinedRefs);        continue;      } -    auto *B = dyn_cast<DefinedBitcode>(S->body()); -    if (!B || B->file() != &F) +    SymbolBody *B = S->body(); +    if (B->kind() != SymbolBody::DefinedRegularKind) +      continue; +    if (B->File != &F)        continue;      // We collect the set of symbols we want to internalize here diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 37fc0545206..0ec12d00b9e 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -1474,8 +1474,6 @@ SymbolTableSection<ELFT>::getOutputSection(SymbolBody *Sym) {    case SymbolBody::LazyArchiveKind:    case SymbolBody::LazyObjectKind:      break; -  case SymbolBody::DefinedBitcodeKind: -    llvm_unreachable("should have been replaced");    }    return nullptr;  } diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index e701d928c11..0aacb04aa95 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -471,7 +471,7 @@ Symbol *SymbolTable<ELFT>::addBitcode(StringRef Name, uint8_t Binding,               /*IsUsedInRegularObj*/ false, F);    int Cmp = compareDefinedNonCommon<ELFT>(S, WasInserted, Binding);    if (Cmp > 0) -    replaceBody<DefinedBitcode>(S, Name, StOther, Type, F); +    replaceBody<DefinedRegular<ELFT>>(S, Name, StOther, Type, F);    else if (Cmp == 0)      reportDuplicate(S->body(), F);    return S; diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index 0d63281580f..7699cb2b520 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -81,8 +81,6 @@ static typename ELFT::uint getSymVA(const SymbolBody &Body,    case SymbolBody::LazyObjectKind:      assert(Body.symbol()->IsUsedInRegularObj && "lazy symbol reached writer");      return 0; -  case SymbolBody::DefinedBitcodeKind: -    llvm_unreachable("should have been replaced");    }    llvm_unreachable("invalid symbol kind");  } @@ -192,16 +190,6 @@ Defined::Defined(Kind K, StringRef Name, uint8_t StOther, uint8_t Type)  Defined::Defined(Kind K, uint32_t NameOffset, uint8_t StOther, uint8_t Type)      : SymbolBody(K, NameOffset, StOther, Type) {} -DefinedBitcode::DefinedBitcode(StringRef Name, uint8_t StOther, uint8_t Type, -                               BitcodeFile *F) -    : Defined(DefinedBitcodeKind, Name, StOther, Type) { -  this->File = F; -} - -bool DefinedBitcode::classof(const SymbolBody *S) { -  return S->kind() == DefinedBitcodeKind; -} -  Undefined::Undefined(StringRef Name, uint8_t StOther, uint8_t Type,                       InputFile *File)      : SymbolBody(SymbolBody::UndefinedKind, Name, StOther, Type) { diff --git a/lld/ELF/Symbols.h b/lld/ELF/Symbols.h index 47dea9af181..abbfa26cc13 100644 --- a/lld/ELF/Symbols.h +++ b/lld/ELF/Symbols.h @@ -45,7 +45,6 @@ public:      DefinedRegularKind = DefinedFirst,      SharedKind,      DefinedCommonKind, -    DefinedBitcodeKind,      DefinedSyntheticKind,      DefinedLast = DefinedSyntheticKind,      UndefinedKind, @@ -159,14 +158,6 @@ public:    static bool classof(const SymbolBody *S) { return S->isDefined(); }  }; -// The defined symbol in LLVM bitcode files. -class DefinedBitcode : public Defined { -public: -  DefinedBitcode(StringRef Name, uint8_t StOther, uint8_t Type, BitcodeFile *F); -  static bool classof(const SymbolBody *S); -  BitcodeFile *file() { return (BitcodeFile *)this->File; } -}; -  template <class ELFT> class DefinedCommon : public Defined {  public:    DefinedCommon(StringRef N, uint64_t Size, uint64_t Alignment, uint8_t StOther, @@ -217,6 +208,12 @@ public:                  llvm::ELF::STT_NOTYPE),          Value(0), Size(0), Section(NullInputSection) {} +  DefinedRegular(StringRef Name, uint8_t StOther, uint8_t Type, BitcodeFile *F) +      : Defined(SymbolBody::DefinedRegularKind, Name, StOther, Type), Value(0), +        Size(0), Section(NullInputSection) { +    this->File = F; +  } +    static bool classof(const SymbolBody *S) {      return S->kind() == SymbolBody::DefinedRegularKind;    } @@ -439,11 +436,11 @@ struct Symbol {    // large and aligned enough to store any derived class of SymbolBody. We    // assume that the size and alignment of ELF64LE symbols is sufficient for any    // ELFT, and we verify this with the static_asserts in replaceBody. -  llvm::AlignedCharArrayUnion< -      DefinedBitcode, DefinedCommon<llvm::object::ELF64LE>, -      DefinedRegular<llvm::object::ELF64LE>, -      DefinedSynthetic<llvm::object::ELF64LE>, Undefined, -      SharedSymbol<llvm::object::ELF64LE>, LazyArchive, LazyObject> +  llvm::AlignedCharArrayUnion<DefinedCommon<llvm::object::ELF64LE>, +                              DefinedRegular<llvm::object::ELF64LE>, +                              DefinedSynthetic<llvm::object::ELF64LE>, +                              Undefined, SharedSymbol<llvm::object::ELF64LE>, +                              LazyArchive, LazyObject>        Body;    SymbolBody *body() { return reinterpret_cast<SymbolBody *>(Body.buffer); }  | 

