summaryrefslogtreecommitdiffstats
path: root/lld/wasm/SymbolTable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/wasm/SymbolTable.cpp')
-rw-r--r--lld/wasm/SymbolTable.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp
index c4a460f3ad7..74d3132e9f3 100644
--- a/lld/wasm/SymbolTable.cpp
+++ b/lld/wasm/SymbolTable.cpp
@@ -28,17 +28,33 @@ SymbolTable *lld::wasm::Symtab;
void SymbolTable::addFile(InputFile *File) {
log("Processing: " + toString(File));
+
+ // .a file
+ if (auto *F = dyn_cast<ArchiveFile>(File)) {
+ F->parse();
+ return;
+ }
+
+ // .so file
+ if (auto *F = dyn_cast<SharedFile>(File)) {
+ SharedFiles.push_back(F);
+ return;
+ }
+
if (Config->Trace)
message(toString(File));
- File->parse();
// LLVM bitcode file
- if (auto *F = dyn_cast<BitcodeFile>(File))
+ if (auto *F = dyn_cast<BitcodeFile>(File)) {
+ F->parse();
BitcodeFiles.push_back(F);
- else if (auto *F = dyn_cast<ObjFile>(File))
- ObjectFiles.push_back(F);
- else if (auto *F = dyn_cast<SharedFile>(File))
- SharedFiles.push_back(F);
+ return;
+ }
+
+ // Regular object file
+ auto *F = cast<ObjFile>(File);
+ F->parse(false);
+ ObjectFiles.push_back(F);
}
// This function is where all the optimizations of link-time
OpenPOWER on IntegriCloud