xref: /llvm-project/llvm/test/MC/WebAssembly/reloc-relative.ll (revision 270f63b84a612dfa438df3d59903bb76fa0c7740)
1; RUN: llc -O0 -filetype=obj %s -o - | llvm-readobj -r --expand-relocs - | FileCheck %s
2
3; CHECK:      Format: WASM
4; CHECK:      Relocations [
5; CHECK-NEXT:   Section (3) DATA {
6; CHECK-NEXT:     Relocation {
7; CHECK-NEXT:       Type: R_WASM_MEMORY_ADDR_LOCREL_I32 (23)
8; CHECK-NEXT:       Offset: 0x6
9; CHECK-NEXT:       Symbol: foo
10; CHECK-NEXT:       Addend: 0
11; CHECK-NEXT:     }
12; CHECK-NEXT:     Relocation {
13; CHECK-NEXT:       Type: R_WASM_MEMORY_ADDR_LOCREL_I32 (23)
14; CHECK-NEXT:       Offset: 0xA
15; CHECK-NEXT:       Symbol: fizz
16; CHECK-NEXT:       Addend: 0
17; CHECK-NEXT:     }
18; CHECK-NEXT:     Relocation {
19; CHECK-NEXT:       Type: R_WASM_MEMORY_ADDR_LOCREL_I32 (23)
20; CHECK-NEXT:       Offset: 0x17
21; CHECK-NEXT:       Symbol: foo
22; CHECK-NEXT:       Addend: 4
23; CHECK-NEXT:     }
24; CHECK-NEXT:   }
25; CHECK-NEXT: ]
26
27target triple = "wasm32-unknown-unknown"
28
29
30; @foo - @bar
31@foo = external global i32, align 4
32@bar = constant i32 sub (
33    i32 ptrtoint (ptr @foo to i32),
34    i32 ptrtoint (ptr @bar to i32)
35), section ".sec1"
36
37
38; @foo - @addend + 4
39@fizz = constant i32 42, align 4, section ".sec2"
40@addend = constant i32 sub (
41    i32 ptrtoint (ptr @foo to i32),
42    i32 ptrtoint (ptr @fizz to i32)
43), section ".sec2"
44
45@x_sec = constant i32 sub (
46    i32 ptrtoint (ptr @fizz to i32),
47    i32 ptrtoint (ptr @x_sec to i32)
48), section ".sec1"
49