mirror of
https://github.com/intel/llvm.git
synced 2026-01-24 00:20:25 +08:00
[WebAssembly] Include SYMBOL_INFO for imports as well as exports
Only effects --emit-relocs/--relocatable Patch by Nicholas Wilson! Differential Revision: https://reviews.llvm.org/D42306 llvm-svn: 322994
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user