diff options
author | Sam Clegg <sbc@chromium.org> | 2019-11-05 10:15:56 -0800 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2019-12-11 11:54:57 -0800 |
commit | 881d877846e2904c731d616731969421ce8cc825 (patch) | |
tree | 39540e2e606f4b5fb1fe0a3675c566094f8c69c8 /llvm/lib/MC/WasmObjectWriter.cpp | |
parent | 8db5143b1a1521915c842ebef23cb9fe8fe607ce (diff) | |
download | bcm5719-llvm-881d877846e2904c731d616731969421ce8cc825.tar.gz bcm5719-llvm-881d877846e2904c731d616731969421ce8cc825.zip |
[WebAssembly] Add new `export_name` clang attribute for controlling wasm export names
This is equivalent to the existing `import_name` and `import_module`
attributes which control the import names in the final wasm binary
produced by lld.
This maps the existing
This attribute currently requires a string rather than using the
symbol name for a couple of reasons:
1. Avoid confusion with static and dynamic linking which is
based on symbol name. Exporting a function from a wasm module using
this directive is orthogonal to both static and dynamic linking.
2. Avoids name mangling.
Differential Revision: https://reviews.llvm.org/D70520
Diffstat (limited to 'llvm/lib/MC/WasmObjectWriter.cpp')
-rw-r--r-- | llvm/lib/MC/WasmObjectWriter.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp index b22a393fcd4..321f93d7609 100644 --- a/llvm/lib/MC/WasmObjectWriter.cpp +++ b/llvm/lib/MC/WasmObjectWriter.cpp @@ -1324,6 +1324,14 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm, Comdats[C->getName()].emplace_back( WasmComdatEntry{wasm::WASM_COMDAT_FUNCTION, Index}); } + + if (WS.hasExportName()) { + wasm::WasmExport Export; + Export.Name = WS.getExportName(); + Export.Kind = wasm::WASM_EXTERNAL_FUNCTION; + Export.Index = Index; + Exports.push_back(Export); + } } else { // An import; the index was assigned above. Index = WasmIndices.find(&WS)->second; @@ -1454,6 +1462,8 @@ uint64_t WasmObjectWriter::writeObject(MCAssembler &Asm, } if (WS.hasImportName()) Flags |= wasm::WASM_SYMBOL_EXPLICIT_NAME; + if (WS.hasExportName()) + Flags |= wasm::WASM_SYMBOL_EXPORTED; wasm::WasmSymbolInfo Info; Info.Name = WS.getName(); |