summaryrefslogtreecommitdiffstats
path: root/lld/wasm/Writer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/wasm/Writer.cpp')
-rw-r--r--lld/wasm/Writer.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/lld/wasm/Writer.cpp b/lld/wasm/Writer.cpp
index ab1ce2c683f..a6d21c10cc9 100644
--- a/lld/wasm/Writer.cpp
+++ b/lld/wasm/Writer.cpp
@@ -386,14 +386,21 @@ void Writer::createLinkingSection() {
return;
std::vector<std::pair<StringRef, uint32_t>> SymbolInfo;
- for (const WasmExportEntry &E : ExportedSymbols) {
+ auto addSymInfo = [&](const Symbol *Sym, StringRef ExternalName) {
uint32_t Flags =
- (E.Sym->isLocal() ? WASM_SYMBOL_BINDING_LOCAL :
- E.Sym->isWeak() ? WASM_SYMBOL_BINDING_WEAK : 0) |
- (E.Sym->isHidden() ? WASM_SYMBOL_VISIBILITY_HIDDEN : 0);
+ (Sym->isLocal() ? WASM_SYMBOL_BINDING_LOCAL :
+ Sym->isWeak() ? WASM_SYMBOL_BINDING_WEAK : 0) |
+ (Sym->isHidden() ? WASM_SYMBOL_VISIBILITY_HIDDEN : 0);
if (Flags)
- SymbolInfo.emplace_back(E.FieldName, Flags);
- }
+ SymbolInfo.emplace_back(ExternalName, Flags);
+ };
+ // (Imports can't have internal linkage, their names don't need to be budged.)
+ for (const Symbol *Sym : ImportedFunctions)
+ addSymInfo(Sym, Sym->getName());
+ for (const Symbol *Sym : ImportedGlobals)
+ addSymInfo(Sym, Sym->getName());
+ for (const WasmExportEntry &E : ExportedSymbols)
+ addSymInfo(E.Sym, E.FieldName);
if (!SymbolInfo.empty()) {
SubSection SubSection(WASM_SYMBOL_INFO);
writeUleb128(SubSection.getStream(), SymbolInfo.size(), "num sym info");
OpenPOWER on IntegriCloud