xref: /llvm-project/llvm/test/MC/WebAssembly/reloc-code.s (revision 4c75521ce0b1ac55fba1a91ef5156fc811f5dfcb)
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