Skip to content

Commit

Permalink
[WebAssembly] Add some tests for wasm MC layer
Browse files Browse the repository at this point in the history
Subscribers: jfb, dschuff

Differential Revision: https://reviews.llvm.org/D32558

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301606 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
sbc100 committed Apr 28, 2017
1 parent 6b435e9 commit 4275ee9
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 6 deletions.
59 changes: 59 additions & 0 deletions test/MC/WebAssembly/reloc-code.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
; RUN: llc -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: 0x9
; CHECK-NEXT: Index: 0x0
; CHECK-NEXT: Addend: 0
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Type: R_WEBASSEMBLY_GLOBAL_ADDR_LEB (3)
; CHECK-NEXT: Offset: 0x14
; CHECK-NEXT: Index: 0x1
; CHECK-NEXT: Addend: 0
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0)
; CHECK-NEXT: Offset: 0x2D
; CHECK-NEXT: Index: 0x0
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB (0)
; CHECK-NEXT: Offset: 0x34
; CHECK-NEXT: Index: 0x1
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Type: R_WEBASSEMBLY_TYPE_INDEX_LEB (6)
; CHECK-NEXT: Offset: 0x1A
; CHECK-NEXT: Index: 0x1
; CHECK-NEXT: }
; CHECK-NEXT: Relocation {
; CHECK-NEXT: Type: R_WEBASSEMBLY_TYPE_INDEX_LEB (6)
; CHECK-NEXT: Offset: 0x24
; CHECK-NEXT: Index: 0x0
; CHECK-NEXT: }
; CHECK-NEXT: }
; CHECK-NEXT: ]
57 changes: 57 additions & 0 deletions test/MC/WebAssembly/sections.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
; RUN: llc -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:]

5 changes: 2 additions & 3 deletions test/tools/llvm-readobj/relocations.test
Original file line number Diff line number Diff line change
Expand Up @@ -292,19 +292,18 @@ WASM-NEXT: Relocation {
WASM-NEXT: Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB (1)
WASM-NEXT: Offset: 0x6
WASM-NEXT: Index: 0x0
WASM-NEXT: Addend: 0x0
WASM-NEXT: }
WASM-NEXT: Relocation {
WASM-NEXT: Type: R_WEBASSEMBLY_GLOBAL_ADDR_LEB (3)
WASM-NEXT: Offset: 0x15
WASM-NEXT: Index: 0x0
WASM-NEXT: Addend: 0x0
WASM-NEXT: Addend: 0
WASM-NEXT: }
WASM-NEXT: Relocation {
WASM-NEXT: Type: R_WEBASSEMBLY_GLOBAL_ADDR_LEB (3)
WASM-NEXT: Offset: 0x24
WASM-NEXT: Index: 0x1
WASM-NEXT: Addend: 0x0
WASM-NEXT: Addend: 0
WASM-NEXT: }
WASM-NEXT: }
WASM-NEXT: ]
19 changes: 16 additions & 3 deletions tools/llvm-readobj/WasmDumper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,30 @@ void WasmDumper::printRelocation(const SectionRef &Section,
Reloc.getTypeName(RelocTypeName);
const wasm::WasmRelocation &WasmReloc = Obj->getWasmRelocation(Reloc);

bool HasAddend = false;
switch (RelocType) {
case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_LEB:
case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_SLEB:
case wasm::R_WEBASSEMBLY_GLOBAL_ADDR_I32:
HasAddend = true;
break;
default:
break;
}
if (opts::ExpandRelocs) {
DictScope Group(W, "Relocation");
W.printNumber("Type", RelocTypeName, RelocType);
W.printHex("Offset", Reloc.getOffset());
W.printHex("Index", WasmReloc.Index);
W.printHex("Addend", WasmReloc.Addend);
if (HasAddend)
W.printNumber("Addend", WasmReloc.Addend);
} else {
raw_ostream& OS = W.startLine();
OS << W.hex(Reloc.getOffset())
<< " " << RelocTypeName << "[" << WasmReloc.Index << "]"
<< " " << W.hex(WasmReloc.Addend) << "\n";
<< " " << RelocTypeName << "[" << WasmReloc.Index << "]";
if (HasAddend)
OS << " " << WasmReloc.Addend;
OS << "\n";
}
}

Expand Down

0 comments on commit 4275ee9

Please sign in to comment.