summaryrefslogtreecommitdiff
path: root/test/tools/llvm-readobj
diff options
context:
space:
mode:
Diffstat (limited to 'test/tools/llvm-readobj')
-rw-r--r--test/tools/llvm-readobj/Inputs/codeview-cycle.objbin0 -> 1034 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/codeview-label.objbin0 -> 830 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/codeview-merging-anon.objbin0 -> 1181 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/codeview-unsorted.objbin0 -> 1058 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/trivial.obj.wasmbin0 -> 221 bytes
-rw-r--r--test/tools/llvm-readobj/codeview-label.test16
-rw-r--r--test/tools/llvm-readobj/codeview-merging-anon.test29
-rw-r--r--test/tools/llvm-readobj/codeview-merging-cycle.test19
-rw-r--r--test/tools/llvm-readobj/codeview-merging-unsorted.test40
-rw-r--r--test/tools/llvm-readobj/codeview-merging.test56
-rw-r--r--test/tools/llvm-readobj/file-headers.test10
-rw-r--r--test/tools/llvm-readobj/relocations.test25
-rw-r--r--test/tools/llvm-readobj/sections.test57
-rw-r--r--test/tools/llvm-readobj/symbols.test21
14 files changed, 269 insertions, 4 deletions
diff --git a/test/tools/llvm-readobj/Inputs/codeview-cycle.obj b/test/tools/llvm-readobj/Inputs/codeview-cycle.obj
new file mode 100644
index 000000000000..85c2d0e55fe4
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/codeview-cycle.obj
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/codeview-label.obj b/test/tools/llvm-readobj/Inputs/codeview-label.obj
new file mode 100644
index 000000000000..ae49a061bb7c
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/codeview-label.obj
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/codeview-merging-anon.obj b/test/tools/llvm-readobj/Inputs/codeview-merging-anon.obj
new file mode 100644
index 000000000000..3cb58fbd4d54
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/codeview-merging-anon.obj
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj b/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj
new file mode 100644
index 000000000000..08a376de3b96
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/trivial.obj.wasm b/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
new file mode 100644
index 000000000000..f14192f1798b
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/trivial.obj.wasm
Binary files differ
diff --git a/test/tools/llvm-readobj/codeview-label.test b/test/tools/llvm-readobj/codeview-label.test
new file mode 100644
index 000000000000..3bf6debe0d7f
--- /dev/null
+++ b/test/tools/llvm-readobj/codeview-label.test
@@ -0,0 +1,16 @@
+; RUN: llvm-readobj -codeview %S/Inputs/codeview-label.obj | FileCheck %s
+
+; CHECK-LABEL: Label (0x1000) {
+; CHECK-NEXT: TypeLeafKind: LF_LABEL (0xE)
+; CHECK-NEXT: Mode: Near (0x0)
+; CHECK-NEXT: }
+
+; To reproduce codeview-label.obj:
+; $ cat codeview-label.asm
+; .model flat, C
+; .code
+; public foo
+; foo:
+; ret
+; end
+; $ ml -c -Zi codeview-label.asm
diff --git a/test/tools/llvm-readobj/codeview-merging-anon.test b/test/tools/llvm-readobj/codeview-merging-anon.test
new file mode 100644
index 000000000000..cf0484074d02
--- /dev/null
+++ b/test/tools/llvm-readobj/codeview-merging-anon.test
@@ -0,0 +1,29 @@
+# Test what happens when the first type record (0x1000) is a LF_FIELDLIST
+# record.
+
+# Steps to regenerate input:
+# $ cat t.c
+# struct { int x; } o;
+# $ cl -Z7 t.c
+
+RUN: llvm-readobj -codeview %S/Inputs/codeview-merging-anon.obj | FileCheck %s
+RUN: llvm-readobj -codeview-merged-types %S/Inputs/codeview-merging-anon.obj | FileCheck %s
+
+CHECK-LABEL: FieldList (0x1000) {
+CHECK-NEXT: TypeLeafKind: LF_FIELDLIST (0x1203)
+CHECK-NEXT: DataMember {
+CHECK-NEXT: TypeLeafKind: LF_MEMBER (0x150D)
+CHECK-NEXT: AccessSpecifier: Public (0x3)
+CHECK-NEXT: Type: int (0x74)
+CHECK-NEXT: FieldOffset: 0x0
+CHECK-NEXT: Name: x
+CHECK-NEXT: }
+CHECK-NEXT: }
+CHECK-LABEL: Struct (0x1001) {
+CHECK: TypeLeafKind: LF_STRUCTURE (0x1505)
+CHECK: MemberCount: 1
+CHECK: FieldList: <field list> (0x1000)
+CHECK: Name: <unnamed-tag>
+CHECK: LinkageName: .?AU<unnamed-tag>@@
+CHECK: }
+CHECK-LABEL: StringId
diff --git a/test/tools/llvm-readobj/codeview-merging-cycle.test b/test/tools/llvm-readobj/codeview-merging-cycle.test
new file mode 100644
index 000000000000..3a96be9ca985
--- /dev/null
+++ b/test/tools/llvm-readobj/codeview-merging-cycle.test
@@ -0,0 +1,19 @@
+; RUN: not llvm-readobj -codeview-merged-types %S/Inputs/codeview-cycle.obj 2>&1 | FileCheck %s
+
+; CHECK: Error{{.*}} input type graph contains cycles
+
+; To reproduce codeview-cycle.obj:
+; $ cat codeview-cycle.asm
+; .model flat, C
+; .code
+; pfoo_list TYPEDEF PTR foo_list
+; foo_list STRUCT
+; next pfoo_list ?
+; data dd ?
+; foo_list ENDS
+; public foo
+; foo proc dst:ptr foo_list
+; ret
+; foo endp
+; end
+; $ ml -c -Zi codeview-cycle.asm
diff --git a/test/tools/llvm-readobj/codeview-merging-unsorted.test b/test/tools/llvm-readobj/codeview-merging-unsorted.test
new file mode 100644
index 000000000000..6aaab3a891ee
--- /dev/null
+++ b/test/tools/llvm-readobj/codeview-merging-unsorted.test
@@ -0,0 +1,40 @@
+; RUN: llvm-readobj -codeview %S/Inputs/codeview-unsorted.obj | FileCheck %s
+; RUN: llvm-readobj -codeview-merged-types %S/Inputs/codeview-unsorted.obj | FileCheck %s --check-prefix=MERGED
+
+; The input type stream has records that refer to later type indices in the same
+; stream:
+
+; CHECK: Pointer (0x1000)
+; CHECK: Struct (0x1001)
+; CHECK: FieldList: {{.*}} (0x1002)
+; CHECK: FieldList (0x1002)
+; CHECK: Pointer (0x1003)
+; CHECK: Procedure (0x1004)
+; CHECK: ArgListType: {{.*}} (0x1005)
+; CHECK: ArgList (0x1005)
+
+; MERGED: Pointer (0x1000)
+; MERGED: FieldList (0x1001)
+; MERGED: Struct (0x1002)
+; MERGED: FieldList: {{.*}} (0x1001)
+; MERGED: Pointer (0x1003)
+; MERGED: ArgList (0x1004)
+; MERGED: Procedure (0x1005)
+; MERGED: ArgListType: {{.*}} (0x1004)
+
+
+; To reproduce codeview-unsorted.obj:
+; $ cat codeview-unsorted.asm
+; .model flat, C
+; .code
+; PBYTE TYPEDEF PTR BYTE
+; foo_list STRUCT
+; next PBYTE ?
+; data dd ?
+; foo_list ENDS
+; public foo
+; foo proc dst:ptr foo_list
+; ret
+; foo endp
+; end
+; $ ml -c -Zi codeview-unsorted.asm
diff --git a/test/tools/llvm-readobj/codeview-merging.test b/test/tools/llvm-readobj/codeview-merging.test
index 60894eff33eb..4d453e5a1167 100644
--- a/test/tools/llvm-readobj/codeview-merging.test
+++ b/test/tools/llvm-readobj/codeview-merging.test
@@ -21,6 +21,15 @@ RUN: llvm-readobj -codeview %S/Inputs/codeview-merging-1.obj | FileCheck %s --ch
RUN: llvm-readobj -codeview %S/Inputs/codeview-merging-2.obj | FileCheck %s --check-prefix=OBJ2
RUN: llvm-readobj -codeview-merged-types %S/Inputs/codeview-merging-1.obj %S/Inputs/codeview-merging-2.obj | FileCheck %s
+OBJ1: Procedure ({{.*}}) {
+OBJ1-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008)
+OBJ1-NEXT: ReturnType: int (0x74)
+OBJ1-NEXT: CallingConvention: NearC (0x0)
+OBJ1-NEXT: FunctionOptions [ (0x0)
+OBJ1-NEXT: ]
+OBJ1-NEXT: NumParameters: 1
+OBJ1-NEXT: ArgListType: (A*) (0x1002)
+OBJ1-NEXT: }
OBJ1: FuncId (0x100D) {
OBJ1-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601)
OBJ1-NEXT: ParentScope: 0x0
@@ -50,16 +59,55 @@ OBJ2-NEXT: Name: g
OBJ2-NEXT: }
OBJ2-NOT: FuncId
-CHECK: FuncId (0x100D) {
+CHECK: MergedTypeStream [
+CHECK: Procedure ({{.*}}) {
+CHECK-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008)
+CHECK-NEXT: ReturnType: int (0x74)
+CHECK-NEXT: CallingConvention: NearC (0x0)
+CHECK-NEXT: FunctionOptions [ (0x0)
+CHECK-NEXT: ]
+CHECK-NEXT: NumParameters: 1
+CHECK-NEXT: ArgListType: (A*) (0x1002)
+CHECK-NEXT: }
+CHECK: Struct (0x1007) {
+CHECK-NEXT: TypeLeafKind: LF_STRUCTURE (0x1505)
+CHECK-NEXT: MemberCount: 1
+CHECK-NEXT: Properties [ (0x200)
+CHECK-NEXT: HasUniqueName (0x200)
+CHECK-NEXT: ]
+CHECK-NEXT: FieldList: <field list> (0x1006)
+CHECK-NEXT: DerivedFrom: 0x0
+CHECK-NEXT: VShape: 0x0
+CHECK-NEXT: SizeOf: 8
+CHECK-NEXT: Name: B
+CHECK-NEXT: LinkageName: .?AUB@@
+CHECK-NEXT: }
+CHECK: ]
+
+CHECK: MergedIDStream [
+CHECK-NEXT: StringId (0x1000) {
+CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+CHECK-NEXT: Id: 0x0
+CHECK-NEXT: StringData: d:\src\llvm\build\t.cpp
+CHECK-NEXT: }
+# Test that we contextually dump item ids and type ids from different databases.
+CHECK-NEXT: UdtSourceLine (0x1001) {
+CHECK-NEXT: TypeLeafKind: LF_UDT_SRC_LINE (0x1606)
+CHECK-NEXT: UDT: B (0x1007)
+CHECK-NEXT: SourceFile: d:\src\llvm\build\t.cpp (0x1000)
+CHECK-NEXT: LineNumber: 3
+CHECK-NEXT: }
+CHECK: FuncId (0x1002) {
CHECK-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601)
CHECK-NEXT: ParentScope: 0x0
-CHECK-NEXT: FunctionType: int (B*) (0x100C)
+CHECK-NEXT: FunctionType: int (B*)
CHECK-NEXT: Name: g
CHECK-NEXT: }
-CHECK-NEXT: FuncId (0x100E) {
+CHECK-NEXT: FuncId (0x1003) {
CHECK-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601)
CHECK-NEXT: ParentScope: 0x0
-CHECK-NEXT: FunctionType: int (A*) (0x1003)
+CHECK-NEXT: FunctionType: int (A*)
CHECK-NEXT: Name: f
CHECK-NEXT: }
CHECK-NOT: FuncId
+CHECK: ]
diff --git a/test/tools/llvm-readobj/file-headers.test b/test/tools/llvm-readobj/file-headers.test
index 662c9b6bd4d7..47fb24de1b60 100644
--- a/test/tools/llvm-readobj/file-headers.test
+++ b/test/tools/llvm-readobj/file-headers.test
@@ -26,6 +26,11 @@ RUN: llvm-readobj -h %p/Inputs/magic.coff-importlib \
RUN: | FileCheck %s -check-prefix COFF-IMPORTLIB
RUN: llvm-readobj -h %p/Inputs/trivial.obj.elf-lanai \
RUN: | FileCheck %s -check-prefix ELF-LANAI
+# trivial.obj.wasm was generated using the following command:
+# echo "extern int bar, baz; int foo() { return bar + baz + (int)&foo; }" | \
+# ./bin/clang -c -o trivial.obj.wasm -target wasm32-unknown-unknown-wasm -x c -
+RUN: llvm-readobj -h %p/Inputs/trivial.obj.wasm \
+RUN: | FileCheck %s -check-prefix WASM
COFF-ARM: File: {{(.*[/\\])?}}trivial.obj.coff-arm
COFF-ARM-NEXT: Format: COFF-ARM
@@ -367,3 +372,8 @@ ELF-LANAI-NEXT: SectionHeaderEntrySize: 40
ELF-LANAI-NEXT: SectionHeaderCount: 8
ELF-LANAI-NEXT: StringTableSectionIndex: 1
ELF-LANAI-NEXT: }
+
+WASM: Format: WASM
+WASM-NEXT: Arch: wasm32
+WASM-NEXT: AddressSize: 32bit
+WASM-NEXT: Version: 0x1
diff --git a/test/tools/llvm-readobj/relocations.test b/test/tools/llvm-readobj/relocations.test
index 229fef54fb8b..475ac1d7e296 100644
--- a/test/tools/llvm-readobj/relocations.test
+++ b/test/tools/llvm-readobj/relocations.test
@@ -16,6 +16,8 @@ RUN: llvm-readobj -r --expand-relocs %p/Inputs/trivial.obj.macho-ppc64 \
RUN: | FileCheck %s -check-prefix MACHO-PPC64
RUN: llvm-readobj -r -expand-relocs %p/Inputs/trivial.obj.macho-arm \
RUN: | FileCheck %s -check-prefix MACHO-ARM
+RUN: llvm-readobj -r --expand-relocs %p/Inputs/trivial.obj.wasm \
+RUN: | FileCheck %s -check-prefix WASM
COFF: Relocations [
COFF-NEXT: Section (1) .text {
@@ -283,3 +285,26 @@ MACHO-ARM-NEXT: Value: 0x4
MACHO-ARM-NEXT: }
MACHO-ARM-NEXT: }
MACHO-ARM-NEXT: ]
+
+WASM: Relocations [
+WASM-NEXT: Section (8) CODE {
+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: }
+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: }
+WASM-NEXT: }
+WASM-NEXT: ]
diff --git a/test/tools/llvm-readobj/sections.test b/test/tools/llvm-readobj/sections.test
index 54654e7070ef..312c47fe4c82 100644
--- a/test/tools/llvm-readobj/sections.test
+++ b/test/tools/llvm-readobj/sections.test
@@ -14,6 +14,8 @@ RUN: llvm-readobj -s %p/Inputs/trivial.obj.macho-ppc64 \
RUN: | FileCheck %s -check-prefix MACHO-PPC64
RUN: llvm-readobj -s %p/Inputs/trivial.obj.macho-arm \
RUN: | FileCheck %s -check-prefix MACHO-ARM
+RUN: llvm-readobj -s %p/Inputs/trivial.obj.wasm \
+RUN: | FileCheck %s -check-prefix WASM
COFF: Sections [
COFF-NEXT: Section {
@@ -490,3 +492,58 @@ MACHO-ARM-NEXT: Reserved1: 0x0
MACHO-ARM-NEXT: Reserved2: 0x0
MACHO-ARM-NEXT: }
MACHO-ARM-NEXT:]
+
+WASM: Sections [
+WASM-NEXT: Section {
+WASM-NEXT: Type: TYPE (0x1)
+WASM-NEXT: Size: 5
+WASM-NEXT: Offset: 8
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: IMPORT (0x2)
+WASM-NEXT: Size: 23
+WASM-NEXT: Offset: 19
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: FUNCTION (0x3)
+WASM-NEXT: Size: 2
+WASM-NEXT: Offset: 48
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: TABLE (0x4)
+WASM-NEXT: Size: 4
+WASM-NEXT: Offset: 56
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: MEMORY (0x5)
+WASM-NEXT: Size: 3
+WASM-NEXT: Offset: 66
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: EXPORT (0x7)
+WASM-NEXT: Size: 7
+WASM-NEXT: Offset: 75
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: ELEM (0x9)
+WASM-NEXT: Size: 7
+WASM-NEXT: Offset: 88
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: CODE (0xA)
+WASM-NEXT: Size: 61
+WASM-NEXT: Offset: 101
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: CUSTOM (0x0)
+WASM-NEXT: Size: 17
+WASM-NEXT: Offset: 168
+WASM-NEXT: Name: name
+WASM-NEXT: }
+WASM-NEXT: Section {
+WASM-NEXT: Type: CUSTOM (0x0)
+WASM-NEXT: Size: 24
+WASM-NEXT: Offset: 191
+WASM-NEXT: Name: reloc.CODE
+WASM-NEXT: }
+WASM-NEXT:]
diff --git a/test/tools/llvm-readobj/symbols.test b/test/tools/llvm-readobj/symbols.test
index 71955e0d8235..1037c2866023 100644
--- a/test/tools/llvm-readobj/symbols.test
+++ b/test/tools/llvm-readobj/symbols.test
@@ -2,6 +2,8 @@ RUN: llvm-readobj -t %p/Inputs/trivial.obj.coff-i386 \
RUN: | FileCheck %s -check-prefix COFF
RUN: llvm-readobj -t %p/Inputs/trivial.obj.elf-i386 \
RUN: | FileCheck %s -check-prefix ELF
+RUN: llvm-readobj -t %p/Inputs/trivial.obj.wasm \
+RUN: | FileCheck %s -check-prefix WASM
COFF: Symbols [
COFF-NEXT: Symbol {
@@ -68,3 +70,22 @@ ELF-NEXT: Type: Object (0x1)
ELF-NEXT: Other: 0
ELF-NEXT: Section: .rodata.str1.1 (0x5)
ELF-NEXT: }
+
+WASM: Symbols [
+WASM-NEXT: Symbol {
+WASM-NEXT: Name: bar
+WASM-NEXT: Type: GLOBAL_IMPORT (0x2)
+WASM-NEXT: }
+WASM-NEXT: Symbol {
+WASM-NEXT: Name: baz
+WASM-NEXT: Type: GLOBAL_IMPORT (0x2)
+WASM-NEXT: }
+WASM-NEXT: Symbol {
+WASM-NEXT: Name: foo
+WASM-NEXT: Type: FUNCTION_EXPORT (0x1)
+WASM-NEXT: }
+WASM-NEXT: Symbol {
+WASM-NEXT: Name: foo
+WASM-NEXT: Type: DEBUG_FUNCTION_NAME (0x4)
+WASM-NEXT: }
+WASM-NEXT: ]