Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/llvm/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lld/COFF
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-07-03 01:52:33 +0300
committerRui Ueyama <ruiu@google.com>2015-07-03 01:52:33 +0300
commit6be9099140df35cb308ac883db3183221cf7ed15 (patch)
tree8942a14fc44fb4cb2da9995a04ea781f97801fdd /lld/COFF
parent0cd9248d9e1c4a35ea7633a11de3fb394b48f452 (diff)
COFF: Define SymbolTable::insert to simplify. NFC.
llvm-svn: 241311
Diffstat (limited to 'lld/COFF')
-rw-r--r--lld/COFF/SymbolTable.cpp42
-rw-r--r--lld/COFF/SymbolTable.h1
2 files changed, 21 insertions, 22 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp
index 53e4ee8c88f0..832c5f05cfff 100644
--- a/lld/COFF/SymbolTable.cpp
+++ b/lld/COFF/SymbolTable.cpp
@@ -164,12 +164,9 @@ bool SymbolTable::reportRemainingUndefines() {
}
void SymbolTable::addLazy(Lazy *New, std::vector<Symbol *> *Accum) {
- Symbol *&Sym = Symtab[New->getName()];
- if (!Sym) {
- Sym = new (Alloc) Symbol(New);
- New->setBackref(Sym);
+ Symbol *Sym = insert(New);
+ if (Sym->Body == New)
return;
- }
SymbolBody *Existing = Sym->Body;
if (!isa<Undefined>(Existing))
return;
@@ -181,17 +178,13 @@ void SymbolTable::addLazy(Lazy *New, std::vector<Symbol *> *Accum) {
std::error_code SymbolTable::addSymbol(SymbolBody *New) {
// Find an existing symbol or create and insert a new one.
assert(isa<Defined>(New) || isa<Undefined>(New));
- Symbol *&Sym = Symtab[New->getName()];
- if (!Sym) {
- Sym = new (Alloc) Symbol(New);
- New->setBackref(Sym);
+ Symbol *Sym = insert(New);
+ if (Sym->Body == New)
return std::error_code();
- }
- New->setBackref(Sym);
+ SymbolBody *Existing = Sym->Body;
// If we have an undefined symbol and a lazy symbol,
// let the lazy symbol to read a member file.
- SymbolBody *Existing = Sym->Body;
if (auto *L = dyn_cast<Lazy>(Existing)) {
// Undefined symbols with weak aliases need not to be resolved,
// since they would be replaced with weak aliases if they remain
@@ -216,6 +209,17 @@ std::error_code SymbolTable::addSymbol(SymbolBody *New) {
return std::error_code();
}
+Symbol *SymbolTable::insert(SymbolBody *New) {
+ Symbol *&Sym = Symtab[New->getName()];
+ if (Sym) {
+ New->setBackref(Sym);
+ return Sym;
+ }
+ Sym = new (Alloc) Symbol(New);
+ New->setBackref(Sym);
+ return Sym;
+}
+
// Reads an archive member file pointed by a given symbol.
std::error_code SymbolTable::addMemberFile(Lazy *Body) {
auto FileOrErr = Body->getMember();
@@ -304,17 +308,11 @@ std::error_code SymbolTable::addCombinedLTOObject() {
// Find an existing Symbol. We should not see any new undefined symbols at
// this point.
StringRef Name = Body->getName();
- Symbol *&Sym = Symtab[Name];
- if (!Sym) {
- if (!isa<Defined>(Body)) {
- llvm::errs() << "LTO: undefined symbol: " << Name << '\n';
- return make_error_code(LLDError::BrokenFile);
- }
- Sym = new (Alloc) Symbol(Body);
- Body->setBackref(Sym);
- continue;
+ Symbol *Sym = insert(Body);
+ if (Sym->Body == Body && !isa<Defined>(Body)) {
+ llvm::errs() << "LTO: undefined symbol: " << Name << '\n';
+ return make_error_code(LLDError::BrokenFile);
}
- Body->setBackref(Sym);
if (isa<DefinedBitcode>(Sym->Body)) {
// The symbol should now be defined.
diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h
index 996732296aa9..4b22f3d1451c 100644
--- a/lld/COFF/SymbolTable.h
+++ b/lld/COFF/SymbolTable.h
@@ -89,6 +89,7 @@ private:
std::error_code addSymbol(SymbolBody *New);
void addLazy(Lazy *New, std::vector<Symbol *> *Accum);
+ Symbol *insert(SymbolBody *New);
std::error_code addMemberFile(Lazy *Body);
ErrorOr<ObjectFile *> createLTOObject(llvm::LTOCodeGenerator *CG);