diff --git a/lld/test/wasm/Inputs/undefined-globals.s b/lld/test/wasm/Inputs/undefined-globals.s new file mode 100644 --- /dev/null +++ b/lld/test/wasm/Inputs/undefined-globals.s @@ -0,0 +1,11 @@ +.globl use_undef_global +.globl unused_undef_global +.globl used_undef_global + +use_undef_global: + .functype use_undef_global () -> (i64) + global.get used_undef_global + end_function + +.globaltype unused_undef_global, i64 +.globaltype used_undef_global, i64 diff --git a/lld/test/wasm/Inputs/undefined-globals.yaml b/lld/test/wasm/Inputs/undefined-globals.yaml deleted file mode 100644 --- a/lld/test/wasm/Inputs/undefined-globals.yaml +++ /dev/null @@ -1,53 +0,0 @@ ---- !WASM -FileHeader: - Version: 0x00000001 -Sections: - - Type: TYPE - Signatures: - - Index: 0 - ParamTypes: - ReturnTypes: - - I64 - - Type: IMPORT - Imports: - - Module: env - Field: unused_undef_global - Kind: GLOBAL - GlobalType: I64 - GlobalMutable: true - - Module: env - Field: used_undef_global - Kind: GLOBAL - GlobalType: I64 - GlobalMutable: true - - Type: FUNCTION - FunctionTypes: [ 0 ] - - Type: CODE - Functions: - - Index: 0 - Locals: - Body: 2381808080000B - Relocations: - - Type: R_WASM_GLOBAL_INDEX_LEB - Index: 1 - Offset: 0x00000004 - - Type: CUSTOM - Name: linking - Version: 2 - SymbolTable: - - Index: 0 - Kind: GLOBAL - Name: unused_undef_global - Flags: [ VISIBILITY_HIDDEN, UNDEFINED ] - Global: 0 - - Index: 1 - Kind: GLOBAL - Name: used_undef_global - Flags: [ VISIBILITY_HIDDEN, UNDEFINED ] - Global: 1 - - Index: 2 - Kind: FUNCTION - Name: use_undef_global - Flags: [ VISIBILITY_HIDDEN ] - Function: 0 -... diff --git a/lld/test/wasm/gc-imports.ll b/lld/test/wasm/gc-imports.ll deleted file mode 100644 --- a/lld/test/wasm/gc-imports.ll +++ /dev/null @@ -1,91 +0,0 @@ -; RUN: llc -filetype=obj %s -o %t.o -; RUN: yaml2obj %S/Inputs/undefined-globals.yaml -o %t_globals.o -; RUN: wasm-ld --allow-undefined -o %t1.wasm %t.o %t_globals.o - -target triple = "wasm32-unknown-unknown" - -declare i64 @unused_undef_function(i64 %arg) - -declare i32 @used_undef_function() - -declare i64 @use_undef_global() - -define hidden void @foo() { -entry: - call i64 @unused_undef_function(i64 0) - ret void -} - -define hidden void @_start() { -entry: - call i32 @used_undef_function() - call i64 @use_undef_global() - ret void -} - -; RUN: obj2yaml %t1.wasm | FileCheck %s - -; CHECK: - Type: IMPORT -; CHECK-NEXT: Imports: -; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: used_undef_function -; CHECK-NEXT: Kind: FUNCTION -; CHECK-NEXT: SigIndex: 0 -; CHECK-NEXT: - Module: env -; CHECK-NEXT: Field: used_undef_global -; CHECK-NEXT: Kind: GLOBAL -; CHECK-NEXT: GlobalType: I64 -; CHECK-NEXT: GlobalMutable: true -; CHECK-NEXT: - Type: -; CHECK: - Type: CUSTOM -; CHECK-NEXT: Name: name -; CHECK-NEXT: FunctionNames: -; CHECK-NEXT: - Index: 0 -; CHECK-NEXT: Name: used_undef_function -; CHECK-NEXT: - Index: 1 -; CHECK-NEXT: Name: _start -; CHECK-NEXT: - Index: 2 -; CHECK-NEXT: Name: use_undef_global -; CHECK-NEXT: ... - -; RUN: wasm-ld --no-gc-sections --allow-undefined \ -; RUN: -o %t1.no-gc.wasm %t.o %t_globals.o -; RUN: obj2yaml %t1.no-gc.wasm | FileCheck %s -check-prefix=NO-GC - -; NO-GC: - Type: IMPORT -; NO-GC-NEXT: Imports: -; NO-GC-NEXT: - Module: env -; NO-GC-NEXT: Field: unused_undef_function -; NO-GC-NEXT: Kind: FUNCTION -; NO-GC-NEXT: SigIndex: 0 -; NO-GC-NEXT: - Module: env -; NO-GC-NEXT: Field: used_undef_function -; NO-GC-NEXT: Kind: FUNCTION -; NO-GC-NEXT: SigIndex: 1 -; NO-GC-NEXT: - Module: env -; NO-GC-NEXT: Field: unused_undef_global -; NO-GC-NEXT: Kind: GLOBAL -; NO-GC-NEXT: GlobalType: I64 -; NO-GC-NEXT: GlobalMutable: true -; NO-GC-NEXT: - Module: env -; NO-GC-NEXT: Field: used_undef_global -; NO-GC-NEXT: Kind: GLOBAL -; NO-GC-NEXT: GlobalType: I64 -; NO-GC-NEXT: GlobalMutable: true -; NO-GC-NEXT: - Type: -; NO-GC: - Type: CUSTOM -; NO-GC-NEXT: Name: name -; NO-GC-NEXT: FunctionNames: -; NO-GC-NEXT: - Index: 0 -; NO-GC-NEXT: Name: unused_undef_function -; NO-GC-NEXT: - Index: 1 -; NO-GC-NEXT: Name: used_undef_function -; NO-GC-NEXT: - Index: 2 -; NO-GC-NEXT: Name: __wasm_call_ctors -; NO-GC-NEXT: - Index: 3 -; NO-GC-NEXT: Name: foo -; NO-GC-NEXT: - Index: 4 -; NO-GC-NEXT: Name: _start -; NO-GC-NEXT: - Index: 5 -; NO-GC-NEXT: Name: use_undef_global -; NO-GC-NEXT: ... diff --git a/lld/test/wasm/gc-imports.s b/lld/test/wasm/gc-imports.s new file mode 100644 --- /dev/null +++ b/lld/test/wasm/gc-imports.s @@ -0,0 +1,87 @@ +# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.o +# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %S/Inputs/undefined-globals.s -o %t_globals.o +# RUN: wasm-ld --allow-undefined -o %t1.wasm %t.o %t_globals.o + +.functype unused_undef_function (i64) -> (i64) +.functype used_undef_function () -> (i32) +.functype use_undef_global () -> (i64) + +foo: + .functype foo () -> () + call unused_undef_function + end_function + +.globl _start + +_start: + .functype _start () -> () + call used_undef_function + call use_undef_global + end_function + +# RUN: obj2yaml %t1.wasm | FileCheck %s + +# CHECK: - Type: IMPORT +# CHECK-NEXT: Imports: +# CHECK-NEXT: - Module: env +# CHECK-NEXT: Field: used_undef_function +# CHECK-NEXT: Kind: FUNCTION +# CHECK-NEXT: SigIndex: 0 +# CHECK-NEXT: - Module: env +# CHECK-NEXT: Field: used_undef_global +# CHECK-NEXT: Kind: GLOBAL +# CHECK-NEXT: GlobalType: I64 +# CHECK-NEXT: GlobalMutable: true +# CHECK-NEXT: - Type: +# CHECK: - Type: CUSTOM +# CHECK-NEXT: Name: name +# CHECK-NEXT: FunctionNames: +# CHECK-NEXT: - Index: 0 +# CHECK-NEXT: Name: used_undef_function +# CHECK-NEXT: - Index: 1 +# CHECK-NEXT: Name: _start +# CHECK-NEXT: - Index: 2 +# CHECK-NEXT: Name: use_undef_global +# CHECK-NEXT: ... + +# RUN: wasm-ld --no-gc-sections --allow-undefined \ +# RUN: -o %t1.no-gc.wasm %t.o %t_globals.o +# RUN: obj2yaml %t1.no-gc.wasm | FileCheck %s -check-prefix=NO-GC + +# NO-GC: - Type: IMPORT +# NO-GC-NEXT: Imports: +# NO-GC-NEXT: - Module: env +# NO-GC-NEXT: Field: unused_undef_function +# NO-GC-NEXT: Kind: FUNCTION +# NO-GC-NEXT: SigIndex: 0 +# NO-GC-NEXT: - Module: env +# NO-GC-NEXT: Field: used_undef_function +# NO-GC-NEXT: Kind: FUNCTION +# NO-GC-NEXT: SigIndex: 1 +# NO-GC-NEXT: - Module: env +# NO-GC-NEXT: Field: unused_undef_global +# NO-GC-NEXT: Kind: GLOBAL +# NO-GC-NEXT: GlobalType: I64 +# NO-GC-NEXT: GlobalMutable: true +# NO-GC-NEXT: - Module: env +# NO-GC-NEXT: Field: used_undef_global +# NO-GC-NEXT: Kind: GLOBAL +# NO-GC-NEXT: GlobalType: I64 +# NO-GC-NEXT: GlobalMutable: true +# NO-GC-NEXT: - Type: +# NO-GC: - Type: CUSTOM +# NO-GC-NEXT: Name: name +# NO-GC-NEXT: FunctionNames: +# NO-GC-NEXT: - Index: 0 +# NO-GC-NEXT: Name: unused_undef_function +# NO-GC-NEXT: - Index: 1 +# NO-GC-NEXT: Name: used_undef_function +# NO-GC-NEXT: - Index: 2 +# NO-GC-NEXT: Name: __wasm_call_ctors +# NO-GC-NEXT: - Index: 3 +# NO-GC-NEXT: Name: foo +# NO-GC-NEXT: - Index: 4 +# NO-GC-NEXT: Name: _start +# NO-GC-NEXT: - Index: 5 +# NO-GC-NEXT: Name: use_undef_global +# NO-GC-NEXT: ...