1# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj %s -o - | llvm-readobj -r --expand-relocs - | FileCheck %s 2# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+reference-types -filetype=obj %s -o - | llvm-readobj -r --expand-relocs - | FileCheck --check-prefix=REF %s 3 4# External functions 5.functype c () -> (i32) 6.functype d () -> (i32) 7 8.globl f1 9.globl a 10.globl b 11 12f1: 13 .functype f1 () -> (i32) 14 15 # Call functions at `a` and `b` indirectly. 16 i32.const 0 17 i32.load a - 10 18 call_indirect () -> (i64) 19 drop 20 21 i32.const 0 22 i32.load b + 20 23 call_indirect () -> (i32) 24 drop 25 26 # Call functions `c` and `d` directly 27 call c 28 drop 29 call d 30 end_function 31 32# Pointers to functions of two different types 33.section .data.a,"",@ 34.p2align 3 35a: 36 .int32 5 37 .size a, 4 38 39.section .data.b,"",@ 40.p2align 3 41b: 42 .int32 7 43 .size b, 4 44 45# CHECK: Format: WASM 46# CHECK: Relocations [ 47# CHECK-NEXT: Section (5) CODE { 48# CHECK-NEXT: Relocation { 49# CHECK-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3) 50# CHECK-NEXT: Offset: 0x7 51# CHECK-NEXT: Symbol: a 52# CHECK-NEXT: Addend: -10 53# CHECK-NEXT: } 54# CHECK-NEXT: Relocation { 55# CHECK-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6) 56# CHECK-NEXT: Offset: 0xD 57# CHECK-NEXT: Index: 0x1 58# CHECK-NEXT: } 59# CHECK-NEXT: Relocation { 60# CHECK-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3) 61# CHECK-NEXT: Offset: 0x18 62# CHECK-NEXT: Symbol: b 63# CHECK-NEXT: Addend: 20 64# CHECK-NEXT: } 65# CHECK-NEXT: Relocation { 66# CHECK-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6) 67# CHECK-NEXT: Offset: 0x1E 68# CHECK-NEXT: Index: 0x0 69# CHECK-NEXT: } 70# CHECK-NEXT: Relocation { 71# CHECK-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0) 72# CHECK-NEXT: Offset: 0x26 73# CHECK-NEXT: Symbol: c 74# CHECK-NEXT: } 75# CHECK-NEXT: Relocation { 76# CHECK-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0) 77# CHECK-NEXT: Offset: 0x2D 78# CHECK-NEXT: Symbol: d 79# CHECK-NEXT: } 80# CHECK-NEXT: } 81# CHECK-NEXT: ] 82 83# REF: Format: WASM 84# REF: Relocations [ 85# REF-NEXT: Section (5) CODE { 86# REF-NEXT: Relocation { 87# REF-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3) 88# REF-NEXT: Offset: 0x7 89# REF-NEXT: Symbol: a 90# REF-NEXT: Addend: -10 91# REF-NEXT: } 92# REF-NEXT: Relocation { 93# REF-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6) 94# REF-NEXT: Offset: 0xD 95# REF-NEXT: Index: 0x1 96# REF-NEXT: } 97# REF-NEXT: Relocation { 98# REF-NEXT: Type: R_WASM_TABLE_NUMBER_LEB (20) 99# REF-NEXT: Offset: 0x12 100# REF-NEXT: Symbol: __indirect_function_table 101# REF-NEXT: } 102# REF-NEXT: Relocation { 103# REF-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3) 104# REF-NEXT: Offset: 0x1C 105# REF-NEXT: Symbol: b 106# REF-NEXT: Addend: 20 107# REF-NEXT: } 108# REF-NEXT: Relocation { 109# REF-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6) 110# REF-NEXT: Offset: 0x22 111# REF-NEXT: Index: 0x0 112# REF-NEXT: } 113# REF-NEXT: Relocation { 114# REF-NEXT: Type: R_WASM_TABLE_NUMBER_LEB (20) 115# REF-NEXT: Offset: 0x27 116# REF-NEXT: Symbol: __indirect_function_table 117# REF-NEXT: } 118# REF-NEXT: Relocation { 119# REF-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0) 120# REF-NEXT: Offset: 0x2E 121# REF-NEXT: Symbol: c 122# REF-NEXT: } 123# REF-NEXT: Relocation { 124# REF-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0) 125# REF-NEXT: Offset: 0x35 126# REF-NEXT: Symbol: d 127# REF-NEXT: } 128# REF-NEXT: } 129# REF-NEXT: ] 130