| # 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 (i64) -> (i64) |
| local.get 0 |
| call unused_undef_function |
| end_function |
| |
| .globl _start |
| |
| _start: |
| .functype _start () -> () |
| call used_undef_function |
| drop |
| call use_undef_global |
| drop |
| 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: false |
| # 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: GlobalNames: |
| # CHECK-NEXT: - Index: 0 |
| # CHECK-NEXT: Name: used_undef_global |
| # CHECK-NEXT: - Index: 1 |
| # CHECK-NEXT: Name: __stack_pointer |
| # 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: false |
| # 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: false |
| # 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: GlobalNames: |
| # NO-GC-NEXT: - Index: 0 |
| # NO-GC-NEXT: Name: unused_undef_global |
| # NO-GC-NEXT: - Index: 1 |
| # NO-GC-NEXT: Name: used_undef_global |
| # NO-GC-NEXT: - Index: 2 |
| # NO-GC-NEXT: Name: __stack_pointer |
| # NO-GC-NEXT: ... |