diff options
| author | Derek Schuff <dschuff@google.com> | 2017-03-30 19:44:09 +0000 |
|---|---|---|
| committer | Derek Schuff <dschuff@google.com> | 2017-03-30 19:44:09 +0000 |
| commit | d3d84fdda185356e8f2a9f660e064427566d9798 (patch) | |
| tree | 33908ea553d83fa422b2f354b6d445dee6e7d9a0 /llvm/test | |
| parent | d3209f932f73087c33ccae4b7e7403ca4ad94d28 (diff) | |
| download | bcm5719-llvm-d3d84fdda185356e8f2a9f660e064427566d9798.tar.gz bcm5719-llvm-d3d84fdda185356e8f2a9f660e064427566d9798.zip | |
[WebAssembly] Improve support for WebAssembly binary format
Mostly this change adds support converting to and from
YAML which will allow us to write more test cases for
the WebAssembly MC and lld ports.
Better support for objdump, readelf, and nm will be in
followup CLs.
I had to update the two wasm test binaries because they
used the old style 'name' section which is no longer
supported.
Differential Revision: https://reviews.llvm.org/D31099
Patch by Sam Clegg
llvm-svn: 299101
Diffstat (limited to 'llvm/test')
18 files changed, 386 insertions, 2 deletions
diff --git a/llvm/test/ObjectYAML/wasm/code_section.yaml b/llvm/test/ObjectYAML/wasm/code_section.yaml new file mode 100644 index 00000000000..b75bf7e1cfd --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/code_section.yaml @@ -0,0 +1,72 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TYPE + Signatures: + - ReturnType: F32 + ParamTypes: + - I32 + - ReturnType: NORESULT + ParamTypes: + - I32 + - I64 + - Type: FUNCTION + FunctionTypes: + - 0 + - 1 + - Type: CODE + Relocations: + - Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB + Index: 0 + Offset: 0x00000006 + Addend: 0x00000000 + - Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB + Index: 1 + Offset: 0x00000025 + Addend: 0x00000000 + Functions: + - Locals: + - Type: I32 + Count: 3 + Body: 418080808000210020002101200111808080800000210220020F0B + - Locals: + - Type: I32 + Count: 1 + Body: 108180808000210020000F0B +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: TYPE +# CHECK: Signatures: +# CHECK: - Index: 0 +# CHECK: ReturnType: F32 +# CHECK: ParamTypes: +# CHECK: - I32 +# CHECK: - Index: 1 +# CHECK: ReturnType: NORESULT +# CHECK: ParamTypes: +# CHECK: - I32 +# CHECK: - I64 +# CHECK: - Type: CODE +# CHECK: Relocations: +# CHECK: - Type: R_WEBASSEMBLY_TABLE_INDEX_SLEB +# CHECK: Index: 0 +# CHECK: Offset: 0x00000006 +# CHECK: Addend: 0x00000000 +# CHECK: - Type: R_WEBASSEMBLY_FUNCTION_INDEX_LEB +# CHECK: Index: 1 +# CHECK: Offset: 0x00000025 +# CHECK: Addend: 0x00000000 +# CHECK: Functions: +# CHECK: - Locals: +# CHECK: - Type: I32 +# CHECK: Count: 3 +# CHECK: Body: 418080808000210020002101200111808080800000210220020F0B +# CHECK: - Locals: +# CHECK: - Type: I32 +# CHECK: Count: 1 +# CHECK: Body: 108180808000210020000F0B diff --git a/llvm/test/ObjectYAML/wasm/custom_section.yaml b/llvm/test/ObjectYAML/wasm/custom_section.yaml new file mode 100644 index 00000000000..c7b87cb4239 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/custom_section.yaml @@ -0,0 +1,17 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: CUSTOM + Name: foo + Payload: 03666F6F0401020304 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: CUSTOM +# CHECK: Name: foo +# CHECK: Payload: 03666F6F0401020304 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/data_section.yaml b/llvm/test/ObjectYAML/wasm/data_section.yaml new file mode 100644 index 00000000000..542d0efe42f --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/data_section.yaml @@ -0,0 +1,28 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: MEMORY + Memories: + - Initial: 0x00000003 + - Type: DATA + Segments: + - Index: 0 + Offset: + Opcode: I32_CONST + Value: 4 + Content: '10001000' +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: DATA +# CHECK: Segments: +# CHECK: - Index: 0 +# CHECK: Offset: +# CHECK: Opcode: I32_CONST +# CHECK: Value: 4 +# CHECK: Content: '10001000' +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/elem_section.yaml b/llvm/test/ObjectYAML/wasm/elem_section.yaml new file mode 100644 index 00000000000..67de7095b5f --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/elem_section.yaml @@ -0,0 +1,42 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TABLE + Tables: + - ElemType: ANYFUNC + Limits: + Flags: 0x00000001 + Initial: 0x00000010 + Maximum: 0x00000011 + - Type: ELEM + Segments: + - Offset: + Opcode: I32_CONST + Value: 3 + Functions: + - 1 + - Offset: + Opcode: I32_CONST + Value: 5 + Functions: + - 4 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: ELEM +# CHECK: Segments: +# CHECK: - Offset: +# CHECK: Opcode: I32_CONST +# CHECK: Value: 3 +# CHECK: Functions: +# CHECK: - 1 +# CHECK: - Offset: +# CHECK: Opcode: I32_CONST +# CHECK: Value: 5 +# CHECK: Functions: +# CHECK: - 4 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/export_section.yaml b/llvm/test/ObjectYAML/wasm/export_section.yaml new file mode 100644 index 00000000000..1d1a16fb833 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/export_section.yaml @@ -0,0 +1,27 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: EXPORT + Exports: + - Name: foo + Kind: FUNCTION + Index: 0 + - Name: bar + Kind: FUNCTION + Index: 1 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: EXPORT +# CHECK: Exports: +# CHECK: - Name: foo +# CHECK: Kind: FUNCTION +# CHECK: Index: 0 +# CHECK: - Name: bar +# CHECK: Kind: FUNCTION +# CHECK: Index: 1 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/function_section.yaml b/llvm/test/ObjectYAML/wasm/function_section.yaml new file mode 100644 index 00000000000..6aaf9d4b513 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/function_section.yaml @@ -0,0 +1,19 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: FUNCTION + FunctionTypes: + - 1 + - 0 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: FUNCTION +# CHECK: FunctionTypes: +# CHECK: - 1 +# CHECK: - 0 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/global_section.yaml b/llvm/test/ObjectYAML/wasm/global_section.yaml new file mode 100644 index 00000000000..3f17c6d88ba --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/global_section.yaml @@ -0,0 +1,25 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: GLOBAL + Globals: + - Type: I32 + Mutable: false + InitExpr: + Opcode: I64_CONST + Value: -5 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: GLOBAL +# CHECK: Globals: +# CHECK: - Type: I32 +# CHECK: Mutable: false +# CHECK: InitExpr: +# CHECK: Opcode: I64_CONST +# CHECK: Value: -5 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/header.yaml b/llvm/test/ObjectYAML/wasm/header.yaml new file mode 100644 index 00000000000..c4be4c8a4aa --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/header.yaml @@ -0,0 +1,9 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/header_invalid_version.yaml b/llvm/test/ObjectYAML/wasm/header_invalid_version.yaml new file mode 100644 index 00000000000..a4e1246b984 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/header_invalid_version.yaml @@ -0,0 +1,8 @@ +# RUN: yaml2obj %s | not obj2yaml 2>&1 | FileCheck %s + +--- !WASM +FileHeader: + Version: 0x00000002 +... + +# CHECK: Error: 'Invalid data was encountered while parsing the file' diff --git a/llvm/test/ObjectYAML/wasm/import_section.yaml b/llvm/test/ObjectYAML/wasm/import_section.yaml new file mode 100644 index 00000000000..52f466a00b6 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/import_section.yaml @@ -0,0 +1,41 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TYPE + Signatures: + - ReturnType: I32 + ParamTypes: + - I32 + - Type: IMPORT + Imports: + - Module: foo + Field: bar + Kind: FUNCTION + SigIndex: 0 + - Module: fiz + Field: baz + Kind: GLOBAL + GlobalType: I32 + GlobalMutable: false + - Type: FUNCTION + FunctionTypes: + - 0 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: IMPORT +# CHECK: Imports: +# CHECK: - Module: foo +# CHECK: Field: bar +# CHECK: Kind: FUNCTION +# CHECK: SigIndex: 0 +# CHECK: - Module: fiz +# CHECK: Field: baz +# CHECK: Kind: GLOBAL +# CHECK: GlobalType: I32 +# CHECK: GlobalMutable: false +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/memory_section.yaml b/llvm/test/ObjectYAML/wasm/memory_section.yaml new file mode 100644 index 00000000000..83aae05871d --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/memory_section.yaml @@ -0,0 +1,23 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: MEMORY + Memories: + - Flags: 0x00000001 + Initial: 0x00000002 + Maximum: 0x000000FF + - Initial: 0x00000003 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: MEMORY +# CHECK: Memories: +# CHECK: - Flags: 0x00000001 +# CHECK: Initial: 0x00000002 +# CHECK: Maximum: 0x000000FF +# CHECK: - Initial: 0x00000003 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/start_section.yaml b/llvm/test/ObjectYAML/wasm/start_section.yaml new file mode 100644 index 00000000000..41301a62003 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/start_section.yaml @@ -0,0 +1,15 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: START + StartFunction: 1 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: START +# CHECK: StartFunction: 1 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/table_section.yaml b/llvm/test/ObjectYAML/wasm/table_section.yaml new file mode 100644 index 00000000000..d8b1df25e04 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/table_section.yaml @@ -0,0 +1,25 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TABLE + Tables: + - ElemType: ANYFUNC + Limits: + Flags: 0x00000001 + Initial: 0x00000010 + Maximum: 0x00000011 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: TABLE +# CHECK: Tables: +# CHECK: - ElemType: ANYFUNC +# CHECK: Limits: +# CHECK: Flags: 0x00000001 +# CHECK: Initial: 0x00000010 +# CHECK: Maximum: 0x00000011 +# CHECK: ... diff --git a/llvm/test/ObjectYAML/wasm/type_section.yaml b/llvm/test/ObjectYAML/wasm/type_section.yaml new file mode 100644 index 00000000000..d6602595a60 --- /dev/null +++ b/llvm/test/ObjectYAML/wasm/type_section.yaml @@ -0,0 +1,33 @@ +# RUN: yaml2obj %s | obj2yaml | FileCheck %s +--- !WASM +FileHeader: + Version: 0x00000001 +Sections: + - Type: TYPE + Signatures: + - ReturnType: I32 + ParamTypes: + - F32 + - F32 + - ReturnType: I64 + ParamTypes: + - F64 + - F64 +... +# CHECK: --- !WASM +# CHECK: FileHeader: +# CHECK: Version: 0x00000001 +# CHECK: Sections: +# CHECK: - Type: TYPE +# CHECK: Signatures: +# CHECK: - Index: 0 +# CHECK: ReturnType: I32 +# CHECK: ParamTypes: +# CHECK: - F32 +# CHECK: - F32 +# CHECK: - Index: 1 +# CHECK: ReturnType: I64 +# CHECK: ParamTypes: +# CHECK: - F64 +# CHECK: - F64 +# CHECK: ... diff --git a/llvm/test/tools/llvm-objdump/Inputs/test.wasm b/llvm/test/tools/llvm-objdump/Inputs/test.wasm Binary files differindex 7ba4fef2efd..d3906eeaf6f 100644 --- a/llvm/test/tools/llvm-objdump/Inputs/test.wasm +++ b/llvm/test/tools/llvm-objdump/Inputs/test.wasm diff --git a/llvm/test/tools/llvm-objdump/wasm.txt b/llvm/test/tools/llvm-objdump/wasm.txt index d4f85479d78..4aa40c6c9df 100644 --- a/llvm/test/tools/llvm-objdump/wasm.txt +++ b/llvm/test/tools/llvm-objdump/wasm.txt @@ -9,7 +9,7 @@ # CHECK: 4 EXPORT 0000000e 0000000000000000 # CHECK: 5 ELEM 00000007 0000000000000000 # CHECK: 6 CODE 0000002a 0000000000000000 TEXT -# CHECK: 7 name 0000002c 0000000000000000 +# CHECK: 7 name 0000003c 0000000000000000 # RUN: llvm-objdump -p %p/Inputs/test.wasm | FileCheck %s -check-prefix CHECK-HEADER diff --git a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm Binary files differindex 7ba4fef2efd..d3906eeaf6f 100644 --- a/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm +++ b/llvm/test/tools/llvm-readobj/Inputs/trivial.obj.wasm diff --git a/llvm/test/tools/llvm-readobj/sections.test b/llvm/test/tools/llvm-readobj/sections.test index 26a72d85e49..53705a7a696 100644 --- a/llvm/test/tools/llvm-readobj/sections.test +++ b/llvm/test/tools/llvm-readobj/sections.test @@ -531,7 +531,7 @@ WASM-NEXT: Offset: 75 WASM-NEXT: } WASM-NEXT: Section { WASM-NEXT: Type: CUSTOM (0x0) -WASM-NEXT: Size: 44 +WASM-NEXT: Size: 60 WASM-NEXT: Offset: 119 WASM-NEXT: Name: name WASM-NEXT: } |

