436 lines · plain
1# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj < %s | obj2yaml | FileCheck --check-prefix=CHECK %s2# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+reference-types -filetype=obj < %s | obj2yaml | FileCheck --check-prefix=REF %s3 4# 'foo_alias()' is weak alias of function 'foo()'5# 'bar_alias' is weak alias of global variable 'bar'6# Generates two exports of the same function, one of them weak7 8.functype foo_alias () -> (i32)9 10foo:11 .hidden foo12 .globl foo13 .functype foo () -> (i32)14 i32.const 015 end_function16 17call_direct:18 .hidden call_direct19 .globl call_direct20 .functype call_direct () -> (i32)21 call foo22 end_function23 24call_alias:25 .hidden call_alias26 .globl call_alias27 .functype call_alias () -> (i32)28 call foo_alias29 end_function30 31call_direct_ptr:32 .hidden call_direct_ptr33 .globl call_direct_ptr34 .functype call_direct_ptr () -> (i32)35 i32.const 036 i32.load direct_address37 call_indirect () -> (i32)38 end_function39 40call_alias_ptr:41 .hidden call_alias_ptr42 .globl call_alias_ptr43 .functype call_alias_ptr () -> (i32)44 i32.const 045 i32.load alias_address46 call_indirect () -> (i32)47 end_function48 49.section .data.bar,"",@50bar:51 .int32 752 .size bar, 453 .globl bar54 .p2align 355 56.section .data.direct_address,"",@57direct_address:58 .int32 foo59 .size direct_address, 460 .globl direct_address61 .p2align 362 63.section .data.alias_address,"",@64alias_address:65 .int32 foo_alias66 .size alias_address, 467 .globl alias_address68 .p2align 369 70# Define Aliases71.set foo_alias, foo72 .weak foo_alias73 .type foo_alias,@function74 .hidden foo_alias75 76.set bar_alias, bar77 .weak bar_alias78 .hidden bar_alias79 80# CHECK: - Type: TYPE81# CHECK-NEXT: Signatures:82# CHECK-NEXT: - Index: 083# CHECK-NEXT: ParamTypes: []84# CHECK-NEXT: ReturnTypes:85# CHECK-NEXT: - I3286# CHECK-NEXT: - Type: IMPORT87# CHECK-NEXT: Imports:88# CHECK-NEXT: - Module: env89# CHECK-NEXT: Field: __linear_memory90# CHECK-NEXT: Kind: MEMORY91# CHECK-NEXT: Memory:92# CHECK-NEXT: Minimum: 0x193# CHECK-NEXT: - Module: env94# CHECK-NEXT: Field: __indirect_function_table95# CHECK-NEXT: Kind: TABLE96# CHECK-NEXT: Table:97# CHECK-NEXT: Index: 098# CHECK-NEXT: ElemType: FUNCREF99# CHECK-NEXT: Limits:100# CHECK-NEXT: Minimum: 0x1101# CHECK-NEXT: - Type: FUNCTION102# CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0 ]103# CHECK-NEXT: - Type: ELEM104# CHECK-NEXT: Segments:105# CHECK-NEXT: - Offset:106# CHECK-NEXT: Opcode: I32_CONST107# CHECK-NEXT: Value: 1108# CHECK-NEXT: Functions: [ 0 ]109# CHECK-NEXT: - Type: DATACOUNT110# CHECK-NEXT: Count: 3111# CHECK-NEXT: - Type: CODE112# CHECK-NEXT: Relocations:113# CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB114# CHECK-NEXT: Index: 0115# CHECK-NEXT: Offset: 0x9116# CHECK-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB117# CHECK-NEXT: Index: 3118# CHECK-NEXT: Offset: 0x12119# CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_LEB120# CHECK-NEXT: Index: 5121# CHECK-NEXT: Offset: 0x1E122# CHECK-NEXT: - Type: R_WASM_TYPE_INDEX_LEB123# CHECK-NEXT: Index: 0124# CHECK-NEXT: Offset: 0x24125# CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_LEB126# CHECK-NEXT: Index: 7127# CHECK-NEXT: Offset: 0x31128# CHECK-NEXT: - Type: R_WASM_TYPE_INDEX_LEB129# CHECK-NEXT: Index: 0130# CHECK-NEXT: Offset: 0x37131# CHECK-NEXT: Functions:132# CHECK-NEXT: - Index: 0133# CHECK-NEXT: Locals: []134# CHECK-NEXT: Body: 41000B135# CHECK-NEXT: - Index: 1136# CHECK-NEXT: Locals: []137# CHECK-NEXT: Body: 1080808080000B138# CHECK-NEXT: - Index: 2139# CHECK-NEXT: Locals: []140# CHECK-NEXT: Body: 1080808080000B141# CHECK-NEXT: - Index: 3142# CHECK-NEXT: Locals: []143# CHECK-NEXT: Body: 410028028880808000118080808000000B144# CHECK-NEXT: - Index: 4145# CHECK-NEXT: Locals: []146# CHECK-NEXT: Body: 410028029080808000118080808000000B147# CHECK-NEXT: - Type: DATA148# CHECK-NEXT: Relocations:149# CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_I32150# CHECK-NEXT: Index: 0151# CHECK-NEXT: Offset: 0x13152# CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_I32153# CHECK-NEXT: Index: 3154# CHECK-NEXT: Offset: 0x20155# CHECK-NEXT: Segments:156# CHECK-NEXT: - SectionOffset: 6157# CHECK-NEXT: InitFlags: 0158# CHECK-NEXT: Offset:159# CHECK-NEXT: Opcode: I32_CONST160# CHECK-NEXT: Value: 0161# CHECK-NEXT: Content: '0700000000000000'162# CHECK-NEXT: - SectionOffset: 19163# CHECK-NEXT: InitFlags: 0164# CHECK-NEXT: Offset:165# CHECK-NEXT: Opcode: I32_CONST166# CHECK-NEXT: Value: 8167# CHECK-NEXT: Content: '0100000000000000'168# CHECK-NEXT: - SectionOffset: 32169# CHECK-NEXT: InitFlags: 0170# CHECK-NEXT: Offset:171# CHECK-NEXT: Opcode: I32_CONST172# CHECK-NEXT: Value: 16173# CHECK-NEXT: Content: '0100000000000000'174# CHECK-NEXT: - Type: CUSTOM175# CHECK-NEXT: Name: linking176# CHECK-NEXT: Version: 2177# CHECK-NEXT: SymbolTable:178# CHECK-NEXT: - Index: 0179# CHECK-NEXT: Kind: FUNCTION180# CHECK-NEXT: Name: foo181# CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]182# CHECK-NEXT: Function: 0183# CHECK-NEXT: - Index: 1184# CHECK-NEXT: Kind: FUNCTION185# CHECK-NEXT: Name: call_direct186# CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]187# CHECK-NEXT: Function: 1188# CHECK-NEXT: - Index: 2189# CHECK-NEXT: Kind: FUNCTION190# CHECK-NEXT: Name: call_alias191# CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]192# CHECK-NEXT: Function: 2193# CHECK-NEXT: - Index: 3194# CHECK-NEXT: Kind: FUNCTION195# CHECK-NEXT: Name: foo_alias196# CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, NO_STRIP ]197# CHECK-NEXT: Function: 0198# CHECK-NEXT: - Index: 4199# CHECK-NEXT: Kind: FUNCTION200# CHECK-NEXT: Name: call_direct_ptr201# CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]202# CHECK-NEXT: Function: 3203# CHECK-NEXT: - Index: 5204# CHECK-NEXT: Kind: DATA205# CHECK-NEXT: Name: direct_address206# CHECK-NEXT: Flags: [ ]207# CHECK-NEXT: Segment: 1208# CHECK-NEXT: Size: 4209# CHECK-NEXT: - Index: 6210# CHECK-NEXT: Kind: FUNCTION211# CHECK-NEXT: Name: call_alias_ptr212# CHECK-NEXT: Flags: [ VISIBILITY_HIDDEN ]213# CHECK-NEXT: Function: 4214# CHECK-NEXT: - Index: 7215# CHECK-NEXT: Kind: DATA216# CHECK-NEXT: Name: alias_address217# CHECK-NEXT: Flags: [ ]218# CHECK-NEXT: Segment: 2219# CHECK-NEXT: Size: 4220# CHECK-NEXT: - Index: 8221# CHECK-NEXT: Kind: DATA222# CHECK-NEXT: Name: bar223# CHECK-NEXT: Flags: [ ]224# CHECK-NEXT: Segment: 0225# CHECK-NEXT: Size: 4226# CHECK-NEXT: - Index: 9227# CHECK-NEXT: Kind: DATA228# CHECK-NEXT: Name: bar_alias229# CHECK-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, NO_STRIP ]230# CHECK-NEXT: Segment: 0231# CHECK-NEXT: Size: 4232# CHECK-NEXT: SegmentInfo:233# CHECK-NEXT: - Index: 0234# CHECK-NEXT: Name: .data.bar235# CHECK-NEXT: Alignment: 3236# CHECK-NEXT: Flags: [ ]237# CHECK-NEXT: - Index: 1238# CHECK-NEXT: Name: .data.direct_address239# CHECK-NEXT: Alignment: 3240# CHECK-NEXT: Flags: [ ]241# CHECK-NEXT: - Index: 2242# CHECK-NEXT: Name: .data.alias_address243# CHECK-NEXT: Alignment: 3244# CHECK-NEXT: Flags: [ ]245# CHECK-NEXT: ...246 247# REF: - Type: TYPE248# REF-NEXT: Signatures:249# REF-NEXT: - Index: 0250# REF-NEXT: ParamTypes: []251# REF-NEXT: ReturnTypes:252# REF-NEXT: - I32253# REF-NEXT: - Type: IMPORT254# REF-NEXT: Imports:255# REF-NEXT: - Module: env256# REF-NEXT: Field: __linear_memory257# REF-NEXT: Kind: MEMORY258# REF-NEXT: Memory:259# REF-NEXT: Minimum: 0x1260# REF-NEXT: - Module: env261# REF-NEXT: Field: __indirect_function_table262# REF-NEXT: Kind: TABLE263# REF-NEXT: Table:264# REF-NEXT: Index: 0265# REF-NEXT: ElemType: FUNCREF266# REF-NEXT: Limits:267# REF-NEXT: Minimum: 0x1268# REF-NEXT: - Type: FUNCTION269# REF-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0 ]270# REF-NEXT: - Type: ELEM271# REF-NEXT: Segments:272# REF-NEXT: - Offset:273# REF-NEXT: Opcode: I32_CONST274# REF-NEXT: Value: 1275# REF-NEXT: Functions: [ 0 ]276# REF-NEXT: - Type: DATACOUNT277# REF-NEXT: Count: 3278# REF-NEXT: - Type: CODE279# REF-NEXT: Relocations:280# REF-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB281# REF-NEXT: Index: 0282# REF-NEXT: Offset: 0x9283# REF-NEXT: - Type: R_WASM_FUNCTION_INDEX_LEB284# REF-NEXT: Index: 3285# REF-NEXT: Offset: 0x12286# REF-NEXT: - Type: R_WASM_MEMORY_ADDR_LEB287# REF-NEXT: Index: 5288# REF-NEXT: Offset: 0x1E289# REF-NEXT: - Type: R_WASM_TYPE_INDEX_LEB290# REF-NEXT: Index: 0291# REF-NEXT: Offset: 0x24292# REF-NEXT: - Type: R_WASM_TABLE_NUMBER_LEB293# REF-NEXT: Index: 6294# REF-NEXT: Offset: 0x29295# REF-NEXT: - Type: R_WASM_MEMORY_ADDR_LEB296# REF-NEXT: Index: 8297# REF-NEXT: Offset: 0x35298# REF-NEXT: - Type: R_WASM_TYPE_INDEX_LEB299# REF-NEXT: Index: 0300# REF-NEXT: Offset: 0x3B301# REF-NEXT: - Type: R_WASM_TABLE_NUMBER_LEB302# REF-NEXT: Index: 6303# REF-NEXT: Offset: 0x40304# REF-NEXT: Functions:305# REF-NEXT: - Index: 0306# REF-NEXT: Locals: []307# REF-NEXT: Body: 41000B308# REF-NEXT: - Index: 1309# REF-NEXT: Locals: []310# REF-NEXT: Body: 1080808080000B311# REF-NEXT: - Index: 2312# REF-NEXT: Locals: []313# REF-NEXT: Body: 1080808080000B314# REF-NEXT: - Index: 3315# REF-NEXT: Locals: []316# REF-NEXT: Body: 41002802888080800011808080800080808080000B317# REF-NEXT: - Index: 4318# REF-NEXT: Locals: []319# REF-NEXT: Body: 41002802908080800011808080800080808080000B320# REF-NEXT: - Type: DATA321# REF-NEXT: Relocations:322# REF-NEXT: - Type: R_WASM_TABLE_INDEX_I32323# REF-NEXT: Index: 0324# REF-NEXT: Offset: 0x13325# REF-NEXT: - Type: R_WASM_TABLE_INDEX_I32326# REF-NEXT: Index: 3327# REF-NEXT: Offset: 0x20328# REF-NEXT: Segments:329# REF-NEXT: - SectionOffset: 6330# REF-NEXT: InitFlags: 0331# REF-NEXT: Offset:332# REF-NEXT: Opcode: I32_CONST333# REF-NEXT: Value: 0334# REF-NEXT: Content: '0700000000000000'335# REF-NEXT: - SectionOffset: 19336# REF-NEXT: InitFlags: 0337# REF-NEXT: Offset:338# REF-NEXT: Opcode: I32_CONST339# REF-NEXT: Value: 8340# REF-NEXT: Content: '0100000000000000'341# REF-NEXT: - SectionOffset: 32342# REF-NEXT: InitFlags: 0343# REF-NEXT: Offset:344# REF-NEXT: Opcode: I32_CONST345# REF-NEXT: Value: 16346# REF-NEXT: Content: '0100000000000000'347# REF-NEXT: - Type: CUSTOM348# REF-NEXT: Name: linking349# REF-NEXT: Version: 2350# REF-NEXT: SymbolTable:351# REF-NEXT: - Index: 0352# REF-NEXT: Kind: FUNCTION353# REF-NEXT: Name: foo354# REF-NEXT: Flags: [ VISIBILITY_HIDDEN ]355# REF-NEXT: Function: 0356# REF-NEXT: - Index: 1357# REF-NEXT: Kind: FUNCTION358# REF-NEXT: Name: call_direct359# REF-NEXT: Flags: [ VISIBILITY_HIDDEN ]360# REF-NEXT: Function: 1361# REF-NEXT: - Index: 2362# REF-NEXT: Kind: FUNCTION363# REF-NEXT: Name: call_alias364# REF-NEXT: Flags: [ VISIBILITY_HIDDEN ]365# REF-NEXT: Function: 2366# REF-NEXT: - Index: 3367# REF-NEXT: Kind: FUNCTION368# REF-NEXT: Name: foo_alias369# REF-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, NO_STRIP ]370# REF-NEXT: Function: 0371# REF-NEXT: - Index: 4372# REF-NEXT: Kind: FUNCTION373# REF-NEXT: Name: call_direct_ptr374# REF-NEXT: Flags: [ VISIBILITY_HIDDEN ]375# REF-NEXT: Function: 3376# REF-NEXT: - Index: 5377# REF-NEXT: Kind: DATA378# REF-NEXT: Name: direct_address379# REF-NEXT: Flags: [ ]380# REF-NEXT: Segment: 1381# REF-NEXT: Size: 4382# REF-NEXT: - Index: 6383# REF-NEXT: Kind: TABLE384# REF-NEXT: Name: __indirect_function_table385# REF-NEXT: Flags: [ UNDEFINED, NO_STRIP ]386# REF-NEXT: Table: 0387# REF-NEXT: - Index: 7388# REF-NEXT: Kind: FUNCTION389# REF-NEXT: Name: call_alias_ptr390# REF-NEXT: Flags: [ VISIBILITY_HIDDEN ]391# REF-NEXT: Function: 4392# REF-NEXT: - Index: 8393# REF-NEXT: Kind: DATA394# REF-NEXT: Name: alias_address395# REF-NEXT: Flags: [ ]396# REF-NEXT: Segment: 2397# REF-NEXT: Size: 4398# REF-NEXT: - Index: 9399# REF-NEXT: Kind: DATA400# REF-NEXT: Name: bar401# REF-NEXT: Flags: [ ]402# REF-NEXT: Segment: 0403# REF-NEXT: Size: 4404# REF-NEXT: - Index: 10405# REF-NEXT: Kind: DATA406# REF-NEXT: Name: bar_alias407# REF-NEXT: Flags: [ BINDING_WEAK, VISIBILITY_HIDDEN, NO_STRIP ]408# REF-NEXT: Segment: 0409# REF-NEXT: Size: 4410# REF-NEXT: SegmentInfo:411# REF-NEXT: - Index: 0412# REF-NEXT: Name: .data.bar413# REF-NEXT: Alignment: 3414# REF-NEXT: Flags: [ ]415# REF-NEXT: - Index: 1416# REF-NEXT: Name: .data.direct_address417# REF-NEXT: Alignment: 3418# REF-NEXT: Flags: [ ]419# REF-NEXT: - Index: 2420# REF-NEXT: Name: .data.alias_address421# REF-NEXT: Alignment: 3422# REF-NEXT: Flags: [ ]423# REF-NEXT: ...424 425# CHECK-SYMS: SYMBOL TABLE:426# CHECK-SYMS-NEXT: 00000001 g F CODE .hidden foo427# CHECK-SYMS-NEXT: 00000006 g F CODE .hidden call_direct428# CHECK-SYMS-NEXT: 0000000f g F CODE .hidden call_alias429# CHECK-SYMS-NEXT: 00000001 gw F CODE .hidden foo_alias430# CHECK-SYMS-NEXT: 00000018 g F CODE .hidden call_direct_ptr431# CHECK-SYMS-NEXT: 00000008 g O DATA direct_address432# CHECK-SYMS-NEXT: 0000002b g F CODE .hidden call_alias_ptr433# CHECK-SYMS-NEXT: 00000010 g O DATA alias_address434# CHECK-SYMS-NEXT: 00000000 g O DATA bar435# CHECK-SYMS-NEXT: 00000000 gw O DATA .hidden bar_alias436