Index: test/MC/WebAssembly/reloc-code.ll =================================================================== --- /dev/null +++ test/MC/WebAssembly/reloc-code.ll @@ -0,0 +1,63 @@ +; RUN: llc -O0 -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - | llvm-readobj -r -expand-relocs | FileCheck %s + +; Pointers to functions of two different types +@a = global i64 ()* inttoptr (i64 5 to i64 ()*), align 8 +@b = global i32 ()* inttoptr (i32 7 to i32 ()*), align 8 + +; External functions +declare i32 @c() +declare i32 @d() + +define i32 @f1() { +entry: + %aa = load i64 ()*, i64 ()** @a, align 8 + %bb = load i32 ()*, i32 ()** @b, align 8 + %tmp1 = call i64 %aa() + %tmp2 = call i32 %bb() + %tmp3 = call i32 @c() + %tmp4 = call i32 @d() + ret i32 %tmp2 +} + + +; CHECK: Format: WASM +; CHECK: Relocations [ +; CHECK-NEXT: Section (8) CODE { +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_GLOBAL_ADDR_LEB (3) +; CHECK-NEXT: Offset: 0xD +; CHECK-NEXT: Index: 0x0 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_GLOBAL_ADDR_LEB (3) +; CHECK-NEXT: Offset: 0x1C +; CHECK-NEXT: Index: 0x1 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0) +; CHECK-NEXT: Offset: 0x39 +; CHECK-NEXT: Index: 0x0 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0) +; CHECK-NEXT: Offset: 0x40 +; CHECK-NEXT: Index: 0x1 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_TYPE_INDEX_LEB (6) +; CHECK-NEXT: Offset: 0x26 +; CHECK-NEXT: Index: 0x1 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: Relocation { +; CHECK-NEXT: Type: R_WEBASSEMBLY_TYPE_INDEX_LEB (6) +; CHECK-NEXT: Offset: 0x30 +; CHECK-NEXT: Index: 0x0 +; CHECK-NEXT: Addend: 0x0 +; CHECK-NEXT: } +; CHECK-NEXT: } +; CHECK-NEXT: ]