aboutsummaryrefslogtreecommitdiffstats
path: root/COFF/SymbolTable.h
diff options
context:
space:
mode:
Diffstat (limited to 'COFF/SymbolTable.h')
-rw-r--r--COFF/SymbolTable.h22
1 files changed, 16 insertions, 6 deletions
diff --git a/COFF/SymbolTable.h b/COFF/SymbolTable.h
index 88f47cbe9e78..cd8a53dcecdc 100644
--- a/COFF/SymbolTable.h
+++ b/COFF/SymbolTable.h
@@ -29,7 +29,7 @@ class Defined;
class DefinedAbsolute;
class DefinedRegular;
class DefinedRelative;
-class Lazy;
+class LazyArchive;
class SectionChunk;
class Symbol;
@@ -49,10 +49,13 @@ class SymbolTable {
public:
void addFile(InputFile *file);
+ // Emit errors for symbols that cannot be resolved.
+ void reportUnresolvable();
+
// Try to resolve any undefined symbols and update the symbol table
// accordingly, then print an error message for any remaining undefined
- // symbols.
- void reportRemainingUndefines();
+ // symbols and warn about imported local symbols.
+ void resolveRemainingUndefines();
void loadMinGWAutomaticImports();
bool handleMinGWAutomaticImport(Symbol *sym, StringRef name);
@@ -83,11 +86,12 @@ public:
Symbol *addAbsolute(StringRef n, uint64_t va);
Symbol *addUndefined(StringRef name, InputFile *f, bool isWeakAlias);
- void addLazy(ArchiveFile *f, const Archive::Symbol sym);
+ void addLazyArchive(ArchiveFile *f, const Archive::Symbol &sym);
+ void addLazyObject(LazyObjFile *f, StringRef n);
Symbol *addAbsolute(StringRef n, COFFSymbolRef s);
Symbol *addRegular(InputFile *f, StringRef n,
const llvm::object::coff_symbol_generic *s = nullptr,
- SectionChunk *c = nullptr);
+ SectionChunk *c = nullptr, uint32_t sectionOffset = 0);
std::pair<DefinedRegular *, bool>
addComdat(InputFile *f, StringRef n,
const llvm::object::coff_symbol_generic *s = nullptr);
@@ -97,8 +101,11 @@ public:
Symbol *addImportData(StringRef n, ImportFile *f);
Symbol *addImportThunk(StringRef name, DefinedImportData *s,
uint16_t machine);
+ void addLibcall(StringRef name);
- void reportDuplicate(Symbol *existing, InputFile *newFile);
+ void reportDuplicate(Symbol *existing, InputFile *newFile,
+ SectionChunk *newSc = nullptr,
+ uint32_t newSectionOffset = 0);
// A list of chunks which to be added to .rdata.
std::vector<Chunk *> localImportChunks;
@@ -110,6 +117,9 @@ public:
}
private:
+ /// Given a name without "__imp_" prefix, returns a defined symbol
+ /// with the "__imp_" prefix, if it exists.
+ Defined *impSymbol(StringRef name);
/// Inserts symbol if not already present.
std::pair<Symbol *, bool> insert(StringRef name);
/// Same as insert(Name), but also sets isUsedInRegularObj.