diff --git a/lld/test/wasm/export.ll b/lld/test/wasm/export.ll deleted file mode 100644 --- a/lld/test/wasm/export.ll +++ /dev/null @@ -1,59 +0,0 @@ -; Test in default mode -; RUN: llc -filetype=obj %s -o %t.o -; RUN: not wasm-ld --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s -; RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o -; RUN: obj2yaml %t.wasm | FileCheck %s - -; Now test in Emscripten mode -; RUN: llc -filetype=obj %s -o %t.o -mtriple=wasm32-unknown-emscripten -; RUN: not wasm-ld --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s -; RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o -; RUN: obj2yaml %t.wasm | FileCheck %s --check-prefixes=CHECK,EMSCRIPTEN - -target triple = "wasm32-unknown-unknown" - -@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 ()* @used_function to i8*)], section "llvm.metadata" - -; 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 -} - -; 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 -; CHECK-NEXT: Kind: MEMORY -; CHECK-NEXT: Index: 0 -; CHECK-NEXT: - Name: hidden_function -; CHECK-NEXT: Kind: FUNCTION -; CHECK-NEXT: Index: 0 -; EMSCRIPTEN-NEXT: - Name: used_function -; EMSCRIPTEN-NEXT: Kind: FUNCTION -; EMSCRIPTEN-NEXT: Index: 1 -; CHECK-NEXT: - Name: _start -; CHECK-NEXT: Kind: FUNCTION -; CHECK-NEXT: Index: 2 -; CHECK-NEXT: - Type: CODE diff --git a/lld/test/wasm/export.s b/lld/test/wasm/export.s new file mode 100644 --- /dev/null +++ b/lld/test/wasm/export.s @@ -0,0 +1,60 @@ +# Test in default mode +# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s +# RUN: not wasm-ld --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s +# RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o +# RUN: obj2yaml %t.wasm | FileCheck %s + +# Now test in Emscripten mode +# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-emscripten -o %t.o %s +# RUN: not wasm-ld --export=missing -o %t.wasm %t.o 2>&1 | FileCheck -check-prefix=CHECK-ERROR %s +# RUN: wasm-ld --export=hidden_function -o %t.wasm %t.o +# RUN: obj2yaml %t.wasm | FileCheck %s --check-prefixes=CHECK,EMSCRIPTEN + +# Not exported by default, but forced via commandline + .hidden hidden_function + .globl hidden_function +hidden_function: + .functype hidden_function () -> (i32) + i32.const 0 + end_function + +# Not exported by default + .globl default_function +default_function: + .functype default_function () -> (i32) + i32.const 0 + end_function + +# Exported in emscripten mode which treats .no_dead_strip as a signal to export + .no_dead_strip used_function + .globl used_function +used_function: + .functype used_function () -> (i32) + i32.const 0 + end_function + +# Exported by default +.globl _start +_start: + .functype _start () -> () + end_function + +# 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 +# CHECK-NEXT: Kind: MEMORY +# CHECK-NEXT: Index: 0 +# CHECK-NEXT: - Name: hidden_function +# CHECK-NEXT: Kind: FUNCTION +# CHECK-NEXT: Index: 0 +# EMSCRIPTEN-NEXT: - Name: used_function +# EMSCRIPTEN-NEXT: Kind: FUNCTION +# EMSCRIPTEN-NEXT: Index: 1 +# CHECK-NEXT: - Name: _start +# CHECK-NEXT: Kind: FUNCTION +# CHECK-NEXT: Index: 2 +# CHECK-NEXT: - Type: CODE