130 lines · plain
1# RUN: llvm-mc -triple=wasm32-unknown-unknown -filetype=obj %s -o - | llvm-readobj -r --expand-relocs - | FileCheck %s2# RUN: llvm-mc -triple=wasm32-unknown-unknown -mattr=+reference-types -filetype=obj %s -o - | llvm-readobj -r --expand-relocs - | FileCheck --check-prefix=REF %s3 4# External functions5.functype c () -> (i32)6.functype d () -> (i32)7 8.globl f19.globl a10.globl b11 12f1:13 .functype f1 () -> (i32)14 15 # Call functions at `a` and `b` indirectly.16 i32.const 017 i32.load a - 1018 call_indirect () -> (i64)19 drop20 21 i32.const 022 i32.load b + 2023 call_indirect () -> (i32)24 drop25 26 # Call functions `c` and `d` directly27 call c28 drop29 call d30 end_function31 32# Pointers to functions of two different types33.section .data.a,"",@34.p2align 335a:36 .int32 537 .size a, 438 39.section .data.b,"",@40.p2align 341b:42 .int32 743 .size b, 444 45# CHECK: Format: WASM46# 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: 0x751# CHECK-NEXT: Symbol: a52# CHECK-NEXT: Addend: -1053# CHECK-NEXT: }54# CHECK-NEXT: Relocation {55# CHECK-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6)56# CHECK-NEXT: Offset: 0xD57# CHECK-NEXT: Index: 0x158# CHECK-NEXT: }59# CHECK-NEXT: Relocation {60# CHECK-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3)61# CHECK-NEXT: Offset: 0x1862# CHECK-NEXT: Symbol: b63# CHECK-NEXT: Addend: 2064# CHECK-NEXT: }65# CHECK-NEXT: Relocation {66# CHECK-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6)67# CHECK-NEXT: Offset: 0x1E68# CHECK-NEXT: Index: 0x069# CHECK-NEXT: }70# CHECK-NEXT: Relocation {71# CHECK-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0)72# CHECK-NEXT: Offset: 0x2673# CHECK-NEXT: Symbol: c74# CHECK-NEXT: }75# CHECK-NEXT: Relocation {76# CHECK-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0)77# CHECK-NEXT: Offset: 0x2D78# CHECK-NEXT: Symbol: d79# CHECK-NEXT: }80# CHECK-NEXT: }81# CHECK-NEXT: ]82 83# REF: Format: WASM84# 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: 0x789# REF-NEXT: Symbol: a90# REF-NEXT: Addend: -1091# REF-NEXT: }92# REF-NEXT: Relocation {93# REF-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6)94# REF-NEXT: Offset: 0xD95# REF-NEXT: Index: 0x196# REF-NEXT: }97# REF-NEXT: Relocation {98# REF-NEXT: Type: R_WASM_TABLE_NUMBER_LEB (20)99# REF-NEXT: Offset: 0x12100# REF-NEXT: Symbol: __indirect_function_table101# REF-NEXT: }102# REF-NEXT: Relocation {103# REF-NEXT: Type: R_WASM_MEMORY_ADDR_LEB (3)104# REF-NEXT: Offset: 0x1C105# REF-NEXT: Symbol: b106# REF-NEXT: Addend: 20107# REF-NEXT: }108# REF-NEXT: Relocation {109# REF-NEXT: Type: R_WASM_TYPE_INDEX_LEB (6)110# REF-NEXT: Offset: 0x22111# REF-NEXT: Index: 0x0112# REF-NEXT: }113# REF-NEXT: Relocation {114# REF-NEXT: Type: R_WASM_TABLE_NUMBER_LEB (20)115# REF-NEXT: Offset: 0x27116# REF-NEXT: Symbol: __indirect_function_table117# REF-NEXT: }118# REF-NEXT: Relocation {119# REF-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0)120# REF-NEXT: Offset: 0x2E121# REF-NEXT: Symbol: c122# REF-NEXT: }123# REF-NEXT: Relocation {124# REF-NEXT: Type: R_WASM_FUNCTION_INDEX_LEB (0)125# REF-NEXT: Offset: 0x35126# REF-NEXT: Symbol: d127# REF-NEXT: }128# REF-NEXT: }129# REF-NEXT: ]130