diff options
author | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2019-08-30 23:24:41 +0000 |
---|---|---|
committer | Vlad Tsyrklevich <vlad@tsyrklevich.net> | 2019-08-30 23:24:41 +0000 |
commit | 802aab5de87c5908a6915fca837843db3f8279bb (patch) | |
tree | 6341b67496527507084722f1c2f1593e7d610765 /lld/COFF/InputFiles.cpp | |
parent | d8c20b9443c0e4ef7b1dd5891d897e0638c55c8b (diff) | |
download | bcm5719-llvm-802aab5de87c5908a6915fca837843db3f8279bb.tar.gz bcm5719-llvm-802aab5de87c5908a6915fca837843db3f8279bb.zip |
Revert "[lld-link] implement -start-lib and -end-lib"
This reverts commit r370487 as it is causing ASan/MSan failures on
sanitizer-x86_64-linux-fast
llvm-svn: 370550
Diffstat (limited to 'lld/COFF/InputFiles.cpp')
-rw-r--r-- | lld/COFF/InputFiles.cpp | 62 |
1 files changed, 8 insertions, 54 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 7bdeee9b361..c24b59deb39 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -73,10 +73,6 @@ static void checkAndSetWeakAlias(SymbolTable *symtab, InputFile *f, } } -static bool ignoredSymbolName(StringRef name) { - return name == "@feat.00" || name == "@comp.id"; -} - ArchiveFile::ArchiveFile(MemoryBufferRef m) : InputFile(ArchiveKind, m) {} void ArchiveFile::parse() { @@ -85,7 +81,7 @@ void ArchiveFile::parse() { // Read the symbol table to construct Lazy objects. for (const Archive::Symbol &sym : file->symbols()) - symtab->addLazyArchive(this, sym); + symtab->addLazy(this, sym); } // Returns a buffer pointing to a member file containing a given symbol. @@ -120,49 +116,6 @@ std::vector<MemoryBufferRef> getArchiveMembers(Archive *file) { return v; } -void LazyObjFile::fetch() { - if (mb.getBuffer().empty()) - return; - - InputFile *file; - if (isBitcode(mb)) - file = make<BitcodeFile>(mb, "", 0, std::move(symbols)); - else - file = make<ObjFile>(mb, std::move(symbols)); - mb = {}; - symtab->addFile(file); -} - -void LazyObjFile::parse() { - if (isBitcode(this->mb)) { - // Bitcode file. - std::unique_ptr<lto::InputFile> obj = - CHECK(lto::InputFile::create(this->mb), this); - for (const lto::InputFile::Symbol &sym : obj->symbols()) { - if (!sym.isUndefined()) - symtab->addLazyObject(this, sym.getName()); - } - return; - } - - // Native object file. - COFFObjectFile *coffObj = - dyn_cast<COFFObjectFile>(CHECK(createBinary(mb), this).get()); - uint32_t numSymbols = coffObj->getNumberOfSymbols(); - for (uint32_t i = 0; i < numSymbols; ++i) { - COFFSymbolRef coffSym = check(coffObj->getSymbol(i)); - if (coffSym.isUndefined() || !coffSym.isExternal() || - coffSym.isWeakExternal()) - continue; - StringRef name; - coffObj->getSymbolName(coffSym, name); - if (coffSym.isAbsolute() && ignoredSymbolName(name)) - continue; - symtab->addLazyObject(this, name); - i += coffSym.getNumberOfAuxSymbols(); - } -} - void ObjFile::parse() { // Parse a memory buffer as a COFF file. std::unique_ptr<Binary> bin = CHECK(createBinary(mb), this); @@ -573,11 +526,13 @@ Optional<Symbol *> ObjFile::createDefined( if (sym.isAbsolute()) { StringRef name = getName(); - if (name == "@feat.00") - feat00Flags = sym.getValue(); // Skip special symbols. - if (ignoredSymbolName(name)) + if (name == "@comp.id") return nullptr; + if (name == "@feat.00") { + feat00Flags = sym.getValue(); + return nullptr; + } if (sym.isExternal()) return symtab->addAbsolute(name, sym); @@ -827,9 +782,8 @@ void ImportFile::parse() { } BitcodeFile::BitcodeFile(MemoryBufferRef mb, StringRef archiveName, - uint64_t offsetInArchive, - std::vector<Symbol *> &&symbols) - : InputFile(BitcodeKind, mb), symbols(std::move(symbols)) { + uint64_t offsetInArchive) + : InputFile(BitcodeKind, mb) { std::string path = mb.getBufferIdentifier().str(); if (config->thinLTOIndexOnly) path = replaceThinLTOSuffix(mb.getBufferIdentifier()); |