summaryrefslogtreecommitdiffstats
path: root/lld/COFF/InputFiles.cpp
diff options
context:
space:
mode:
authorVlad Tsyrklevich <vlad@tsyrklevich.net>2019-08-30 23:24:41 +0000
committerVlad Tsyrklevich <vlad@tsyrklevich.net>2019-08-30 23:24:41 +0000
commit802aab5de87c5908a6915fca837843db3f8279bb (patch)
tree6341b67496527507084722f1c2f1593e7d610765 /lld/COFF/InputFiles.cpp
parentd8c20b9443c0e4ef7b1dd5891d897e0638c55c8b (diff)
downloadbcm5719-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.cpp62
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());
OpenPOWER on IntegriCloud