1# RUN: sed -e '/^REF-/d' %s | llvm-mc -triple=wasm32-unknown-unknown -filetype=obj | obj2yaml | FileCheck %s 2# RUN: sed -e 's/^REF-//g' %s | llvm-mc -triple=wasm32-unknown-unknown -mattr=+reference-types -filetype=obj | obj2yaml | FileCheck --check-prefix=REF %s 3 4# Verify that @GOT relocation entryes result in R_WASM_GLOBAL_INDEX_LEB against 5# against the corrsponding function or data symbol and that the corresponding 6# data symbols are imported as a wasm globals. 7 8.functype default_func () -> (i32) 9 10.globaltype __memory_base, i32 11.globaltype __table_base, i32 12 13load_default_data: 14 .functype load_default_data () -> (i32) 15 global.get default_data@GOT 16 i32.load 0 17 end_function 18 19load_default_func: 20 .functype load_default_func () -> (i32) 21 global.get default_func@GOT 22 i32.load 0 23 end_function 24 25load_hidden_data: 26 .functype load_hidden_data () -> (i32) 27 global.get __memory_base 28 i32.const .L.hidden_data@MBREL 29 i32.add 30 end_function 31 32load_hidden_func: 33 .functype load_hidden_func () -> (i32) 34 global.get __table_base 35 i32.const hidden_func@TBREL 36 i32.add 37 end_function 38 39hidden_func: 40 .functype hidden_func () -> (i32) 41 i32.const 0 42 end_function 43 44.section .rodata.hidden_data,"",@ 45.L.hidden_data: 46 .int8 100 47 .size .L.hidden_data, 1 48 49#.hidden hidden_func 50#.hidden hidden_data 51.size default_data, 4 52 53REF-mytable: 54REF-.tabletype mytable, externref 55 56# CHECK: --- !WASM 57# CHECK-NEXT: FileHeader: 58# CHECK-NEXT: Version: 0x1 59# CHECK-NEXT: Sections: 60# CHECK-NEXT: - Type: TYPE 61# CHECK-NEXT: Signatures: 62# CHECK-NEXT: - Index: 0 63# CHECK-NEXT: ParamTypes: [] 64# CHECK-NEXT: ReturnTypes: 65# CHECK-NEXT: - I32 66# CHECK-NEXT: - Type: IMPORT 67# CHECK-NEXT: Imports: 68# CHECK-NEXT: - Module: env 69# CHECK-NEXT: Field: __linear_memory 70# CHECK-NEXT: Kind: MEMORY 71# CHECK-NEXT: Memory: 72# CHECK-NEXT: Minimum: 0x1 73# CHECK-NEXT: - Module: env 74# CHECK-NEXT: Field: default_func 75# CHECK-NEXT: Kind: FUNCTION 76# CHECK-NEXT: SigIndex: 0 77# CHECK-NEXT: - Module: env 78# CHECK-NEXT: Field: __memory_base 79# CHECK-NEXT: Kind: GLOBAL 80# CHECK-NEXT: GlobalType: I32 81# CHECK-NEXT: GlobalMutable: true 82# CHECK-NEXT: - Module: env 83# CHECK-NEXT: Field: __table_base 84# CHECK-NEXT: Kind: GLOBAL 85# CHECK-NEXT: GlobalType: I32 86# CHECK-NEXT: GlobalMutable: true 87# CHECK-NEXT: - Module: env 88# CHECK-NEXT: Field: __indirect_function_table 89# CHECK-NEXT: Kind: TABLE 90# CHECK-NEXT: Table: 91# CHECK-NEXT: Index: 0 92# CHECK-NEXT: ElemType: FUNCREF 93# CHECK-NEXT: Limits: 94# CHECK-NEXT: Minimum: 0x1 95# CHECK-NEXT: - Module: GOT.mem 96# CHECK-NEXT: Field: default_data 97# CHECK-NEXT: Kind: GLOBAL 98# CHECK-NEXT: GlobalType: I32 99# CHECK-NEXT: GlobalMutable: true 100# CHECK-NEXT: - Module: GOT.func 101# CHECK-NEXT: Field: default_func 102# CHECK-NEXT: Kind: GLOBAL 103# CHECK-NEXT: GlobalType: I32 104# CHECK-NEXT: GlobalMutable: true 105# CHECK-NEXT: - Type: FUNCTION 106# CHECK-NEXT: FunctionTypes: [ 0, 0, 0, 0, 0 ] 107# CHECK-NEXT: - Type: ELEM 108# CHECK-NEXT: Segments: 109# CHECK-NEXT: Offset: 110# CHECK-NEXT: Opcode: I32_CONST 111# CHECK-NEXT: Value: 1 112# CHECK-NEXT: Functions: [ 5 ] 113# CHECK-NEXT: - Type: DATACOUNT 114# CHECK-NEXT: Count: 1 115# CHECK-NEXT: - Type: CODE 116# CHECK-NEXT: Relocations: 117# CHECK-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB 118# CHECK-NEXT: Index: 1 119# CHECK-NEXT: Offset: 0x4 120# CHECK-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB 121# CHECK-NEXT: Index: 3 122# CHECK-NEXT: Offset: 0x10 123# CHECK-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB 124# CHECK-NEXT: Index: 5 125# CHECK-NEXT: Offset: 0x1C 126# CHECK-NEXT: - Type: R_WASM_MEMORY_ADDR_REL_SLEB 127# CHECK-NEXT: Index: 6 128# CHECK-NEXT: Offset: 0x22 129# CHECK-NEXT: - Type: R_WASM_GLOBAL_INDEX_LEB 130# CHECK-NEXT: Index: 8 131# CHECK-NEXT: Offset: 0x2C 132# CHECK-NEXT: - Type: R_WASM_TABLE_INDEX_REL_SLEB 133# CHECK-NEXT: Index: 9 134# CHECK-NEXT: Offset: 0x32 135# CHECK-NEXT: Functions: 136# CHECK-NEXT: - Index: 1 137# CHECK-NEXT: Locals: [] 138# CHECK-NEXT: Body: 2382808080002802000B 139# CHECK-NEXT: - Index: 2 140# CHECK-NEXT: Locals: [] 141# CHECK-NEXT: Body: 2383808080002802000B 142# CHECK-NEXT: - Index: 3 143# CHECK-NEXT: Locals: [] 144# CHECK-NEXT: Body: 2380808080004180808080006A0B 145# CHECK-NEXT: - Index: 4 146# CHECK-NEXT: Locals: [] 147# CHECK-NEXT: Body: 2381808080004180808080006A0B 148# CHECK-NEXT: - Index: 5 149# CHECK-NEXT: Locals: [] 150# CHECK-NEXT: Body: 41000B 151# CHECK-NEXT: - Type: DATA 152# CHECK-NEXT: Segments: 153# CHECK-NEXT: - SectionOffset: 6 154# CHECK-NEXT: InitFlags: 0 155# CHECK-NEXT: Offset: 156# CHECK-NEXT: Opcode: I32_CONST 157# CHECK-NEXT: Value: 0 158# CHECK-NEXT: Content: '64' 159# CHECK-NEXT: - Type: CUSTOM 160# CHECK-NEXT: Name: linking 161# CHECK-NEXT: Version: 2 162# CHECK-NEXT: SymbolTable: 163# CHECK-NEXT: - Index: 0 164# CHECK-NEXT: Kind: FUNCTION 165# CHECK-NEXT: Name: load_default_data 166# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 167# CHECK-NEXT: Function: 1 168# CHECK-NEXT: - Index: 1 169# CHECK-NEXT: Kind: DATA 170# CHECK-NEXT: Name: default_data 171# CHECK-NEXT: Flags: [ UNDEFINED ] 172# CHECK-NEXT: - Index: 2 173# CHECK-NEXT: Kind: FUNCTION 174# CHECK-NEXT: Name: load_default_func 175# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 176# CHECK-NEXT: Function: 2 177# CHECK-NEXT: - Index: 3 178# CHECK-NEXT: Kind: FUNCTION 179# CHECK-NEXT: Name: default_func 180# CHECK-NEXT: Flags: [ UNDEFINED ] 181# CHECK-NEXT: Function: 0 182# CHECK-NEXT: - Index: 4 183# CHECK-NEXT: Kind: FUNCTION 184# CHECK-NEXT: Name: load_hidden_data 185# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 186# CHECK-NEXT: Function: 3 187# CHECK-NEXT: - Index: 5 188# CHECK-NEXT: Kind: GLOBAL 189# CHECK-NEXT: Name: __memory_base 190# CHECK-NEXT: Flags: [ UNDEFINED ] 191# CHECK-NEXT: Global: 0 192# CHECK-NEXT: - Index: 6 193# CHECK-NEXT: Kind: DATA 194# CHECK-NEXT: Name: .L.hidden_data 195# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 196# CHECK-NEXT: Segment: 0 197# CHECK-NEXT: Size: 1 198# CHECK-NEXT: - Index: 7 199# CHECK-NEXT: Kind: FUNCTION 200# CHECK-NEXT: Name: load_hidden_func 201# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 202# CHECK-NEXT: Function: 4 203# CHECK-NEXT: - Index: 8 204# CHECK-NEXT: Kind: GLOBAL 205# CHECK-NEXT: Name: __table_base 206# CHECK-NEXT: Flags: [ UNDEFINED ] 207# CHECK-NEXT: Global: 1 208# CHECK-NEXT: - Index: 9 209# CHECK-NEXT: Kind: FUNCTION 210# CHECK-NEXT: Name: hidden_func 211# CHECK-NEXT: Flags: [ BINDING_LOCAL ] 212# CHECK-NEXT: Function: 5 213# REF: - Index: 10 214# REF-NEXT: Kind: TABLE 215# REF-NEXT: Name: mytable 216# REF-NEXT: Flags: [ BINDING_LOCAL ] 217# REF-NEXT: Table: 1 218# REF-NEXT: - Index: 11 219# REF-NEXT: Kind: TABLE 220# REF-NEXT: Name: __indirect_function_table 221# REF-NEXT: Flags: [ UNDEFINED, NO_STRIP ] 222# REF-NEXT: Table: 0 223# CHECK-NEXT: SegmentInfo: 224# CHECK-NEXT: - Index: 0 225# CHECK-NEXT: Name: .rodata.hidden_data 226# CHECK-NEXT: Alignment: 0 227# CHECK-NEXT: Flags: [ ] 228# CHECK-NEXT: ... 229