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: ] Index: test/MC/WebAssembly/sections.ll =================================================================== --- /dev/null +++ test/MC/WebAssembly/sections.ll @@ -0,0 +1,57 @@ +; RUN: llc -O0 -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - | llvm-readobj -s | FileCheck %s + +; external function +declare i32 @a() + +; global data +@b = global i32 3, align 4 + +; local function +define i32 @f1() { +entry: + %tmp1 = call i32 @a() + ret i32 %tmp1 +} + + +; CHECK: Format: WASM +; CHECK: Arch: wasm32 +; CHECK: AddressSize: 32bit +; CHECK: Sections [ +; CHECK: Section { +; CHECK: Type: TYPE (0x1) +; CHECK: } +; CHECK: Section { +; CHECK: Type: IMPORT (0x2) +; CHECK: } +; CHECK: Section { +; CHECK: Type: FUNCTION (0x3) +; CHECK: } +; CHECK: Section { +; CHECK: Type: TABLE (0x4) +; CHECK: } +; CHECK: Section { +; CHECK: Type: MEMORY (0x5) +; CHECK: } +; CHECK: Section { +; CHECK: Type: GLOBAL (0x6) +; CHECK: } +; CHECK: Section { +; CHECK: Type: EXPORT (0x7) +; CHECK: } +; CHECK: Section { +; CHECK: Type: CODE (0xA) +; CHECK: } +; CHECK: Section { +; CHECK: Type: DATA (0xB) +; CHECK: } +; CHECK: Section { +; CHECK: Type: CUSTOM (0x0) +; CHECK: Name: name +; CHECK: } +; CHECK: Section { +; CHECK: Type: CUSTOM (0x0) +; CHECK: Name: reloc.CODE +; CHECK: } +; CHECK:] +