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/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | |
parent | 8db5143b1a1521915c842ebef23cb9fe8fe607ce (diff) | |
download | llvm-881d877846e2904c731d616731969421ce8cc825.zip llvm-881d877846e2904c731d616731969421ce8cc825.tar.gz llvm-881d877846e2904c731d616731969421ce8cc825.tar.bz2 |
[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/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp index 138ce85..1f0bdde 100644 --- a/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp +++ b/llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmParser.cpp @@ -712,6 +712,18 @@ public: return expect(AsmToken::EndOfStatement, "EOL"); } + if (DirectiveID.getString() == ".export_name") { + auto SymName = expectIdent(); + if (SymName.empty()) + return true; + if (expect(AsmToken::Comma, ",")) + return true; + auto ExportName = expectIdent(); + auto WasmSym = cast<MCSymbolWasm>(Ctx.getOrCreateSymbol(SymName)); + WasmSym->setExportName(ExportName); + TOut.emitExportName(WasmSym, ExportName); + } + if (DirectiveID.getString() == ".import_module") { auto SymName = expectIdent(); if (SymName.empty()) |