diff options
Diffstat (limited to 'lld/wasm')
-rw-r--r-- | lld/wasm/Driver.cpp | 9 | ||||
-rw-r--r-- | lld/wasm/InputFiles.cpp | 3 | ||||
-rw-r--r-- | lld/wasm/SymbolTable.cpp | 3 | ||||
-rw-r--r-- | lld/wasm/SyntheticSections.cpp | 22 |
4 files changed, 10 insertions, 27 deletions
diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp index 9a42fa1d2c0..34801c1b50e 100644 --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -441,10 +441,8 @@ static Symbol *handleUndefined(StringRef name) { static UndefinedGlobal * createUndefinedGlobal(StringRef name, llvm::wasm::WasmGlobalType *type) { - auto *sym = - cast<UndefinedGlobal>(symtab->addUndefinedGlobal(name, name, - defaultModule, 0, - nullptr, type)); + auto *sym = cast<UndefinedGlobal>(symtab->addUndefinedGlobal( + name, name, defaultModule, WASM_SYMBOL_UNDEFINED, nullptr, type)); config->allowUndefinedSymbols.insert(sym->getName()); sym->isUsedInRegularObj = true; return sym; @@ -582,7 +580,8 @@ struct WrappedSymbol { }; static Symbol *addUndefined(StringRef name) { - return symtab->addUndefinedFunction(name, "", "", 0, nullptr, nullptr, false); + return symtab->addUndefinedFunction(name, "", "", WASM_SYMBOL_UNDEFINED, + nullptr, nullptr, false); } // Handles -wrap option. diff --git a/lld/wasm/InputFiles.cpp b/lld/wasm/InputFiles.cpp index 6ec4b9dcd01..ed9378c250b 100644 --- a/lld/wasm/InputFiles.cpp +++ b/lld/wasm/InputFiles.cpp @@ -421,7 +421,7 @@ Symbol *ObjFile::createDefined(const WasmSymbol &sym) { Symbol *ObjFile::createUndefined(const WasmSymbol &sym, bool isCalledDirectly) { StringRef name = sym.Info.Name; - uint32_t flags = sym.Info.Flags; + uint32_t flags = sym.Info.Flags | WASM_SYMBOL_UNDEFINED; switch (sym.Info.Kind) { case WASM_SYMBOL_TYPE_FUNCTION: @@ -509,6 +509,7 @@ static Symbol *createBitcodeSymbol(const std::vector<bool> &keptComdats, bool excludedByComdat = c != -1 && !keptComdats[c]; if (objSym.isUndefined() || excludedByComdat) { + flags |= WASM_SYMBOL_UNDEFINED; if (objSym.isExecutable()) return symtab->addUndefinedFunction(name, name, defaultModule, flags, &f, nullptr, true); diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp index 44417b076c7..b53ddaf5750 100644 --- a/lld/wasm/SymbolTable.cpp +++ b/lld/wasm/SymbolTable.cpp @@ -401,6 +401,7 @@ Symbol *SymbolTable::addUndefinedFunction(StringRef name, StringRef importName, LLVM_DEBUG(dbgs() << "addUndefinedFunction: " << name << " [" << (sig ? toString(*sig) : "none") << "] IsCalledDirectly:" << isCalledDirectly << "\n"); + assert(flags & WASM_SYMBOL_UNDEFINED); Symbol *s; bool wasInserted; @@ -443,6 +444,7 @@ Symbol *SymbolTable::addUndefinedFunction(StringRef name, StringRef importName, Symbol *SymbolTable::addUndefinedData(StringRef name, uint32_t flags, InputFile *file) { LLVM_DEBUG(dbgs() << "addUndefinedData: " << name << "\n"); + assert(flags & WASM_SYMBOL_UNDEFINED); Symbol *s; bool wasInserted; @@ -464,6 +466,7 @@ Symbol *SymbolTable::addUndefinedGlobal(StringRef name, StringRef importName, InputFile *file, const WasmGlobalType *type) { LLVM_DEBUG(dbgs() << "addUndefinedGlobal: " << name << "\n"); + assert(flags & WASM_SYMBOL_UNDEFINED); Symbol *s; bool wasInserted; diff --git a/lld/wasm/SyntheticSections.cpp b/lld/wasm/SyntheticSections.cpp index f2d4c2e07e1..c3dd32aea54 100644 --- a/lld/wasm/SyntheticSections.cpp +++ b/lld/wasm/SyntheticSections.cpp @@ -362,26 +362,6 @@ bool DataCountSection::isNeeded() const { return numSegments && config->sharedMemory; } -static uint32_t getWasmFlags(const Symbol *sym) { - uint32_t flags = 0; - if (sym->isLocal()) - flags |= WASM_SYMBOL_BINDING_LOCAL; - if (sym->isWeak()) - flags |= WASM_SYMBOL_BINDING_WEAK; - if (sym->isHidden()) - flags |= WASM_SYMBOL_VISIBILITY_HIDDEN; - if (sym->isUndefined()) - flags |= WASM_SYMBOL_UNDEFINED; - if (auto *f = dyn_cast<UndefinedFunction>(sym)) { - if (f->getName() != f->importName) - flags |= WASM_SYMBOL_EXPLICIT_NAME; - } else if (auto *g = dyn_cast<UndefinedGlobal>(sym)) { - if (g->getName() != g->importName) - flags |= WASM_SYMBOL_EXPLICIT_NAME; - } - return flags; -} - void LinkingSection::writeBody() { raw_ostream &os = bodyOutputStream; @@ -394,7 +374,7 @@ void LinkingSection::writeBody() { for (const Symbol *sym : symtabEntries) { assert(sym->isDefined() || sym->isUndefined()); WasmSymbolType kind = sym->getWasmType(); - uint32_t flags = getWasmFlags(sym); + uint32_t flags = sym->getFlags(); writeU8(sub.os, kind, "sym kind"); writeUleb128(sub.os, flags, "sym flags"); |