166 lines · plain
1# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.o %s2# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/call-indirect.s -o %t2.o3# RUN: wasm-ld --export-dynamic -o %t.wasm %t2.o %t.o4# RUN: obj2yaml %t.wasm | FileCheck %s5 6.globl foo7foo:8 .functype foo () -> (i32)9 i32.const 210 end_function11 12.globl _start13_start:14 .functype _start () -> ()15 i32.const 016 i32.load indirect_func17 call_indirect () -> (i32)18 drop19 end_function20 21# Indirect function call where no function actually has this type.22# Ensures that the type entry is still created in this case.23.section .text,"",@24.globl call_ptr25call_ptr:26 .functype call_ptr (i32) -> ()27 i64.const 128 local.get 029 call_indirect (i64) -> (i64)30 drop31 end_function32 33.globl indirect_func34.section .data.indirect_func,"",@35indirect_func:36 .int32 foo37 .size indirect_func, 438 39# CHECK: !WASM40# CHECK-NEXT: FileHeader:41# CHECK-NEXT: Version: 0x142# CHECK-NEXT: Sections:43# CHECK-NEXT: - Type: TYPE44# CHECK-NEXT: Signatures:45# CHECK-NEXT: - Index: 046# CHECK-NEXT: ParamTypes:47# CHECK-NEXT: ReturnTypes:48# CHECK-NEXT: - I6449# CHECK-NEXT: - Index: 150# CHECK-NEXT: ParamTypes:51# CHECK-NEXT: ReturnTypes:52# CHECK-NEXT: - I3253# CHECK-NEXT: - Index: 254# CHECK-NEXT: ParamTypes:55# CHECK-NEXT: - I6456# CHECK-NEXT: ReturnTypes:57# CHECK-NEXT: - I6458# CHECK-NEXT: - Index: 359# CHECK-NEXT: ParamTypes:60# CHECK-NEXT: ReturnTypes: []61# CHECK-NEXT: - Index: 462# CHECK-NEXT: ParamTypes:63# CHECK-NEXT: - I3264# CHECK-NEXT: ReturnTypes: []65# CHECK-NEXT: - Type: FUNCTION66# CHECK-NEXT: FunctionTypes: [ 0, 3, 1, 3, 4 ]67# CHECK-NEXT: - Type: TABLE68# CHECK-NEXT: Tables:69# CHECK-NEXT: - Index: 070# CHECK-NEXT: ElemType: FUNCREF71# CHECK-NEXT: Limits:72# CHECK-NEXT: Flags: [ HAS_MAX ]73# CHECK-NEXT: Minimum: 0x374# CHECK-NEXT: Maximum: 0x375# CHECK-NEXT: - Type: MEMORY76# CHECK-NEXT: Memories:77# CHECK-NEXT: - Minimum: 0x278# CHECK-NEXT: - Type: GLOBAL79# CHECK-NEXT: Globals:80# CHECK-NEXT: - Index: 081# CHECK-NEXT: Type: I3282# CHECK-NEXT: Mutable: true83# CHECK-NEXT: InitExpr:84# CHECK-NEXT: Opcode: I32_CONST85# CHECK-NEXT: Value: 6553686# CHECK-NEXT: - Index: 187# CHECK-NEXT: Type: I3288# CHECK-NEXT: Mutable: false89# CHECK-NEXT: InitExpr:90# CHECK-NEXT: Opcode: I32_CONST91# CHECK-NEXT: Value: 6554492# CHECK-NEXT: - Type: EXPORT93# CHECK-NEXT: Exports:94# CHECK-NEXT: - Name: memory95# CHECK-NEXT: Kind: MEMORY96# CHECK-NEXT: Index: 097# CHECK-NEXT: - Name: bar98# CHECK-NEXT: Kind: FUNCTION99# CHECK-NEXT: Index: 0100# CHECK-NEXT: - Name: call_bar_indirect101# CHECK-NEXT: Kind: FUNCTION102# CHECK-NEXT: Index: 1103# CHECK-NEXT: - Name: foo104# CHECK-NEXT: Kind: FUNCTION105# CHECK-NEXT: Index: 2106# CHECK-NEXT: - Name: _start107# CHECK-NEXT: Kind: FUNCTION108# CHECK-NEXT: Index: 3109# CHECK-NEXT: - Name: indirect_func110# CHECK-NEXT: Kind: GLOBAL111# CHECK-NEXT: Index: 1112# CHECK-NEXT: - Name: call_ptr113# CHECK-NEXT: Kind: FUNCTION114# CHECK-NEXT: Index: 4115# CHECK-NEXT: - Type: ELEM116# CHECK-NEXT: Segments:117# CHECK-NEXT: - Offset:118# CHECK-NEXT: Opcode: I32_CONST119# CHECK-NEXT: Value: 1120# CHECK-NEXT: Functions: [ 0, 2 ]121# CHECK-NEXT: - Type: CODE122# CHECK-NEXT: Functions:123# CHECK-NEXT: - Index: 0124# CHECK-NEXT: Locals:125# CHECK-NEXT: Body: 42010B126# CHECK-NEXT: - Index: 1127# CHECK-NEXT: Locals:128# CHECK-NEXT: Body: 410028028080848000118080808000001A410028028480848000118180808000001A0B129# CHECK-NEXT: - Index: 2130# CHECK-NEXT: Locals:131# CHECK-NEXT: Body: 41020B132# CHECK-NEXT: - Index: 3133# CHECK-NEXT: Locals:134# CHECK-NEXT: Body: 410028028880848000118180808000001A0B135# CHECK-NEXT: - Index: 4136# CHECK-NEXT: Locals:137# CHECK-NEXT: Body: 42012000118280808000001A0B138# CHECK-NEXT: - Type: DATA139# CHECK-NEXT: Segments:140# CHECK-NEXT: - SectionOffset: 8141# CHECK-NEXT: InitFlags: 0142# CHECK-NEXT: Offset:143# CHECK-NEXT: Opcode: I32_CONST144# CHECK-NEXT: Value: 65536145# CHECK-NEXT: Content: '010000000200000002000000'146# CHECK-NEXT: - Type: CUSTOM147# CHECK-NEXT: Name: name148# CHECK-NEXT: FunctionNames:149# CHECK-NEXT: - Index: 0150# CHECK-NEXT: Name: bar151# CHECK-NEXT: - Index: 1152# CHECK-NEXT: Name: call_bar_indirect153# CHECK-NEXT: - Index: 2154# CHECK-NEXT: Name: foo155# CHECK-NEXT: - Index: 3156# CHECK-NEXT: Name: _start157# CHECK-NEXT: - Index: 4158# CHECK-NEXT: Name: call_ptr159# CHECK-NEXT: GlobalNames:160# CHECK-NEXT: - Index: 0161# CHECK-NEXT: Name: __stack_pointer162# CHECK-NEXT: DataSegmentNames:163# CHECK-NEXT: - Index: 0164# CHECK-NEXT: Name: .data165# CHECK-NEXT: ...166