diff options
author | Sam Clegg <sbc@chromium.org> | 2019-02-07 01:53:50 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2019-02-07 01:53:50 +0000 |
commit | af3b9d0570bb2e5d67554a705ffe383377305660 (patch) | |
tree | a145dc6f2e6d2e39dccb1e7cc8735e8ffaffc2ca | |
parent | 92369dcffd7e43e8a0ce20ea938dfb40487d6369 (diff) | |
download | bcm5719-llvm-af3b9d0570bb2e5d67554a705ffe383377305660.tar.gz bcm5719-llvm-af3b9d0570bb2e5d67554a705ffe383377305660.zip |
[WebAssembly] Honor WASM_SYMBOL_EXPORT symbol flag
This flag means that symbol should be exported in the final binary.
The reason for this change is to allow source level annotations to
trigger a given symbol to be exported:
https://github.com/emscripten-core/emscripten/issues/7702
Differential Revision: https://reviews.llvm.org/D57869
llvm-svn: 353364
-rw-r--r-- | lld/test/wasm/export.ll | 23 | ||||
-rw-r--r-- | lld/wasm/Symbols.cpp | 2 |
2 files changed, 23 insertions, 2 deletions
diff --git a/lld/test/wasm/export.ll b/lld/test/wasm/export.ll index 519aafebbe2..48b66ee10f7 100644 --- a/lld/test/wasm/export.ll +++ b/lld/test/wasm/export.ll @@ -3,13 +3,29 @@ ; RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o ; RUN: obj2yaml %t.wasm | FileCheck %s +@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @used_function to i8*)], section "llvm.metadata" + target triple = "wasm32-unknown-unknown" +; Not exported by default, but forced via commandline define hidden i32 @hidden_function() local_unnamed_addr { entry: ret i32 0 } +; Not exported by default +define i32 @default_function() local_unnamed_addr { +entry: + ret i32 0 +} + +; Exported because its part of llvm.used +define i32 @used_function() local_unnamed_addr { +entry: + ret i32 0 +} + +; Exported by default define void @_start() local_unnamed_addr { entry: ret void @@ -17,6 +33,8 @@ entry: ; CHECK-ERROR: error: symbol exported via --export not found: missing +; CHECK-NOT: - Name: default_function + ; CHECK: - Type: EXPORT ; CHECK-NEXT: Exports: ; CHECK-NEXT: - Name: memory @@ -31,7 +49,10 @@ entry: ; CHECK-NEXT: - Name: hidden_function ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 1 -; CHECK-NEXT: - Name: _start +; CHECK-NEXT: - Name: used_function ; CHECK-NEXT: Kind: FUNCTION ; CHECK-NEXT: Index: 2 +; CHECK-NEXT: - Name: _start +; CHECK-NEXT: Kind: FUNCTION +; CHECK-NEXT: Index: 3 ; CHECK-NEXT: - Type: CODE diff --git a/lld/wasm/Symbols.cpp b/lld/wasm/Symbols.cpp index 4721e35f9f8..60030bef3fa 100644 --- a/lld/wasm/Symbols.cpp +++ b/lld/wasm/Symbols.cpp @@ -116,7 +116,7 @@ bool Symbol::isExported() const { if (Config->ExportDynamic && !isHidden()) return true; - return false; + return Flags & WASM_SYMBOL_EXPORTED; } uint32_t FunctionSymbol::getFunctionIndex() const { |