diff options
| -rw-r--r-- | lld/test/wasm/init-fini.ll | 2 | ||||
| -rw-r--r-- | lld/test/wasm/relocatable.ll | 2 | ||||
| -rw-r--r-- | lld/wasm/Writer.cpp | 19 | 
3 files changed, 17 insertions, 6 deletions
diff --git a/lld/test/wasm/init-fini.ll b/lld/test/wasm/init-fini.ll index 0fa9b20a3f8..a83a5129c63 100644 --- a/lld/test/wasm/init-fini.ll +++ b/lld/test/wasm/init-fini.ll @@ -108,6 +108,8 @@ entry:  ; RELOC:          Name:            linking  ; RELOC-NEXT:     DataSize:        0  ; RELOC-NEXT:     SymbolInfo:       +; RELOC-NEXT:       - Name:            __dso_handle +; RELOC-NEXT:         Flags:           [ BINDING_WEAK, VISIBILITY_HIDDEN ]  ; RELOC-NEXT:       - Name:            func1  ; RELOC-NEXT:         Flags:           [ VISIBILITY_HIDDEN ]  ; RELOC-NEXT:       - Name:            func2 diff --git a/lld/test/wasm/relocatable.ll b/lld/test/wasm/relocatable.ll index 6167353c6c0..8efb240ccfc 100644 --- a/lld/test/wasm/relocatable.ll +++ b/lld/test/wasm/relocatable.ll @@ -229,6 +229,8 @@ entry:  ; CHECK-NEXT:     Name:            linking  ; CHECK-NEXT:     DataSize:        31  ; CHECK-NEXT:     SymbolInfo: +; CHECK-NEXT:       - Name:            bar_import +; CHECK-NEXT:         Flags:           [ BINDING_WEAK ]  ; CHECK-NEXT:       - Name:            hello  ; CHECK-NEXT:         Flags:           [ VISIBILITY_HIDDEN ]  ; CHECK-NEXT:       - Name:            my_func 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");  | 

