diff options
-rw-r--r-- | lld/ELF/InputFiles.cpp | 30 | ||||
-rw-r--r-- | lld/ELF/InputFiles.h | 9 |
2 files changed, 21 insertions, 18 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index d135143..3ca9c0a 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -446,9 +446,9 @@ Optional<DILineInfo> ObjFile<ELFT>::getDILineInfo(InputSectionBase *s, return getDwarf()->getDILineInfo(offset, sectionIndex); } -ELFFileBase::ELFFileBase(Kind k, MemoryBufferRef mb) : InputFile(k, mb) { - ekind = getELFKind(mb, ""); - +ELFFileBase::ELFFileBase(Kind k, ELFKind ekind, MemoryBufferRef mb) + : InputFile(k, mb) { + this->ekind = ekind; switch (ekind) { case ELF32LEKind: init<ELF32LE>(k); @@ -1230,9 +1230,9 @@ static bool isBitcodeNonCommonDef(MemoryBufferRef mb, StringRef symName, } template <class ELFT> -static bool isNonCommonDef(MemoryBufferRef mb, StringRef symName, +static bool isNonCommonDef(ELFKind ekind, MemoryBufferRef mb, StringRef symName, StringRef archiveName) { - ObjFile<ELFT> *obj = make<ObjFile<ELFT>>(mb, archiveName); + ObjFile<ELFT> *obj = make<ObjFile<ELFT>>(ekind, mb, archiveName); StringRef stringtable = obj->getStringTable(); for (auto sym : obj->template getGlobalELFSyms<ELFT>()) { @@ -1248,13 +1248,13 @@ static bool isNonCommonDef(MemoryBufferRef mb, StringRef symName, StringRef archiveName) { switch (getELFKind(mb, archiveName)) { case ELF32LEKind: - return isNonCommonDef<ELF32LE>(mb, symName, archiveName); + return isNonCommonDef<ELF32LE>(ELF32LEKind, mb, symName, archiveName); case ELF32BEKind: - return isNonCommonDef<ELF32BE>(mb, symName, archiveName); + return isNonCommonDef<ELF32BE>(ELF32BEKind, mb, symName, archiveName); case ELF64LEKind: - return isNonCommonDef<ELF64LE>(mb, symName, archiveName); + return isNonCommonDef<ELF64LE>(ELF64LEKind, mb, symName, archiveName); case ELF64BEKind: - return isNonCommonDef<ELF64BE>(mb, symName, archiveName); + return isNonCommonDef<ELF64BE>(ELF64BEKind, mb, symName, archiveName); default: llvm_unreachable("getELFKind"); } @@ -1262,6 +1262,10 @@ static bool isNonCommonDef(MemoryBufferRef mb, StringRef symName, unsigned SharedFile::vernauxNum; +SharedFile::SharedFile(MemoryBufferRef m, StringRef defaultSoName) + : ELFFileBase(SharedKind, getELFKind(m, ""), m), soName(defaultSoName), + isNeeded(!config->asNeeded) {} + // Parse the version definitions in the object file if present, and return a // vector whose nth element contains a pointer to the Elf_Verdef for version // identifier n. Version identifiers that are not definitions map to nullptr. @@ -1736,16 +1740,16 @@ ELFFileBase *elf::createObjFile(MemoryBufferRef mb, StringRef archiveName, ELFFileBase *f; switch (getELFKind(mb, archiveName)) { case ELF32LEKind: - f = make<ObjFile<ELF32LE>>(mb, archiveName); + f = make<ObjFile<ELF32LE>>(ELF32LEKind, mb, archiveName); break; case ELF32BEKind: - f = make<ObjFile<ELF32BE>>(mb, archiveName); + f = make<ObjFile<ELF32BE>>(ELF32BEKind, mb, archiveName); break; case ELF64LEKind: - f = make<ObjFile<ELF64LE>>(mb, archiveName); + f = make<ObjFile<ELF64LE>>(ELF64LEKind, mb, archiveName); break; case ELF64BEKind: - f = make<ObjFile<ELF64BE>>(mb, archiveName); + f = make<ObjFile<ELF64BE>>(ELF64BEKind, mb, archiveName); break; default: llvm_unreachable("getELFKind"); diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h index f426af2..9ef086f 100644 --- a/lld/ELF/InputFiles.h +++ b/lld/ELF/InputFiles.h @@ -160,7 +160,7 @@ private: class ELFFileBase : public InputFile { public: - ELFFileBase(Kind k, MemoryBufferRef m); + ELFFileBase(Kind k, ELFKind ekind, MemoryBufferRef m); static bool classof(const InputFile *f) { return f->isElf(); } template <typename ELFT> llvm::object::ELFFile<ELFT> getObj() const { @@ -221,7 +221,8 @@ public: return this->ELFFileBase::getObj<ELFT>(); } - ObjFile(MemoryBufferRef m, StringRef archiveName) : ELFFileBase(ObjKind, m) { + ObjFile(ELFKind ekind, MemoryBufferRef m, StringRef archiveName) + : ELFFileBase(ObjKind, ekind, m) { this->archiveName = archiveName; } @@ -327,9 +328,7 @@ public: // .so file. class SharedFile : public ELFFileBase { public: - SharedFile(MemoryBufferRef m, StringRef defaultSoName) - : ELFFileBase(SharedKind, m), soName(defaultSoName), - isNeeded(!config->asNeeded) {} + SharedFile(MemoryBufferRef m, StringRef defaultSoName); // This is actually a vector of Elf_Verdef pointers. SmallVector<const void *, 0> verdefs; |