| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/ret32.s -o %t.ret32.o |
| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/call-ret32.s -o %t.call.o |
| # RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %s -o %t.main.o |
| |
| # RUN: wasm-ld --export=call_ret32 --export=ret32 -o %t.wasm %t.main.o %t.ret32.o %t.call.o 2>&1 | FileCheck %s -check-prefix=WARN |
| # RUN: obj2yaml %t.wasm | FileCheck %s -check-prefix=YAML |
| |
| # RUN: wasm-ld -r -o %t.reloc.o %t.main.o %t.ret32.o %t.call.o 2>&1 | FileCheck %s -check-prefix=WARN |
| # RUN: obj2yaml %t.reloc.o | FileCheck %s -check-prefix=RELOC |
| |
| # RUN: not wasm-ld --fatal-warnings -o %t.wasm %t.main.o %t.ret32.o %t.call.o 2>&1 | FileCheck %s -check-prefix=ERROR |
| |
| .functype ret32 (i32, i64, i32) -> (i32) |
| |
| .hidden _start |
| .globl _start |
| _start: |
| .functype _start () -> () |
| i32.const 1 |
| i64.const 2 |
| i32.const 3 |
| call ret32 |
| drop |
| i32.const 1 |
| i64.const 2 |
| i32.const 3 |
| i32.const 0 |
| i32.load ret32_address_main |
| call_indirect (i32, i64, i32) -> (i32) |
| drop |
| end_function |
| |
| .section .data,"",@ |
| .globl ret32_address_main |
| .p2align 2 |
| |
| ret32_address_main: |
| .int32 ret32 |
| .size ret32_address_main, 4 |
| |
| # WARN: warning: function signature mismatch: ret32 |
| # WARN-NEXT: >>> defined as (i32, i64, i32) -> i32 in {{.*}}.main.o |
| # WARN-NEXT: >>> defined as (f32) -> i32 in {{.*}}.ret32.o |
| |
| # ERROR: error: function signature mismatch: ret32 |
| # ERROR-NEXT: >>> defined as (i32, i64, i32) -> i32 in {{.*}}.main.o |
| # ERROR-NEXT: >>> defined as (f32) -> i32 in {{.*}}.ret32.o |
| |
| # YAML: - Type: EXPORT |
| # YAML: - Name: ret32 |
| # YAML-NEXT: Kind: FUNCTION |
| # YAML-NEXT: Index: 2 |
| # YAML-NEXT: - Name: call_ret32 |
| # YAML-NEXT: Kind: FUNCTION |
| # YAML-NEXT: Index: 3 |
| |
| # YAML: - Type: CUSTOM |
| # YAML-NEXT: Name: name |
| # YAML-NEXT: FunctionNames: |
| # YAML-NEXT: - Index: 0 |
| # YAML-NEXT: Name: 'signature_mismatch:ret32' |
| # YAML-NEXT: - Index: 1 |
| # YAML-NEXT: Name: _start |
| # YAML-NEXT: - Index: 2 |
| # YAML-NEXT: Name: ret32 |
| # YAML-NEXT: - Index: 3 |
| # YAML-NEXT: Name: call_ret32 |
| # YAML-NEXT: GlobalNames: |
| # YAML-NEXT: - Index: 0 |
| # YAML-NEXT: Name: __stack_pointer |
| # YAML-NEXT: DataSegmentNames: |
| # YAML-NEXT: - Index: 0 |
| # YAML-NEXT: Name: .data |
| # YAML-NEXT: ... |
| |
| # RELOC: Name: linking |
| # RELOC-NEXT: Version: 2 |
| # RELOC-NEXT: SymbolTable: |
| # RELOC-NEXT: - Index: 0 |
| # RELOC-NEXT: Kind: FUNCTION |
| # RELOC-NEXT: Name: _start |
| # RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] |
| # RELOC-NEXT: Function: 1 |
| # RELOC-NEXT: - Index: 1 |
| # RELOC-NEXT: Kind: FUNCTION |
| # RELOC-NEXT: Name: ret32 |
| # RELOC-NEXT: Flags: [ VISIBILITY_HIDDEN ] |
| # RELOC-NEXT: Function: 2 |
| # RELOC-NEXT: - Index: 2 |
| # RELOC-NEXT: Kind: DATA |
| # RELOC-NEXT: Name: ret32_address_main |
| # RELOC-NEXT: Flags: [ ] |
| # RELOC-NEXT: Segment: 0 |
| # RELOC-NEXT: Size: 4 |
| # RELOC-NEXT: - Index: 3 |
| # RELOC-NEXT: Kind: TABLE |
| # RELOC-NEXT: Name: __indirect_function_table |
| # RELOC-NEXT: Flags: [ UNDEFINED, NO_STRIP ] |
| # RELOC-NEXT: Table: 0 |
| # RELOC-NEXT: - Index: 4 |
| # RELOC-NEXT: Kind: FUNCTION |
| # RELOC-NEXT: Name: call_ret32 |
| # RELOC-NEXT: Flags: [ ] |
| # RELOC-NEXT: Function: 3 |
| # RELOC-NEXT: - Index: 5 |
| # RELOC-NEXT: Kind: DATA |
| # RELOC-NEXT: Name: ret32_address |
| # RELOC-NEXT: Flags: [ ] |
| # RELOC-NEXT: Segment: 1 |
| # RELOC-NEXT: Size: 4 |
| # RELOC-NEXT: - Index: 6 |
| # RELOC-NEXT: Kind: FUNCTION |
| # RELOC-NEXT: Name: 'signature_mismatch:ret32' |
| # RELOC-NEXT: Flags: [ BINDING_LOCAL ] |
| # RELOC-NEXT: Function: 0 |