summaryrefslogtreecommitdiff
path: root/test/tools/llvm-readobj
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2015-05-27 18:44:32 +0000
committerDimitry Andric <dim@FreeBSD.org>2015-05-27 18:44:32 +0000
commit5a5ac124e1efaf208671f01c46edb15f29ed2a0b (patch)
treea6140557876943cdd800ee997c9317283394b22c /test/tools/llvm-readobj
parentf03b5bed27d0d2eafd68562ce14f8b5e3f1f0801 (diff)
Diffstat (limited to 'test/tools/llvm-readobj')
-rw-r--r--test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mipsbin0 -> 920 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mipselbin0 -> 1320 bytes
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/dtflags.elf-x86-64bin0 -> 11800 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/macho-universal-archive.x86_64.i386bin0 -> 1656 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/macho-universal.x86_64.i386bin0 -> 16624 bytes
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/mips-options.elf-mips64elbin0 -> 9288 bytes
-rwxr-xr-xtest/tools/llvm-readobj/Inputs/trivial.exe.coff-armbin0 -> 7680 bytes
-rw-r--r--test/tools/llvm-readobj/Inputs/trivial.ll2
-rw-r--r--test/tools/llvm-readobj/codeview-linetables.test28
-rw-r--r--test/tools/llvm-readobj/coff-arm-baserelocs.test7
-rw-r--r--test/tools/llvm-readobj/elf-dtflags.test6
-rw-r--r--test/tools/llvm-readobj/macho-universal-x86_64.i386.test297
-rw-r--r--test/tools/llvm-readobj/mips-abiflags.test42
-rw-r--r--test/tools/llvm-readobj/mips-options.test22
-rw-r--r--test/tools/llvm-readobj/program-headers.test22
15 files changed, 406 insertions, 20 deletions
diff --git a/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mips b/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mips
new file mode 100644
index 0000000000000..edcd50becec4e
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mips
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mipsel b/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mipsel
new file mode 100644
index 0000000000000..bb5f43d286239
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/abiflags.obj.elf-mipsel
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/dtflags.elf-x86-64 b/test/tools/llvm-readobj/Inputs/dtflags.elf-x86-64
new file mode 100755
index 0000000000000..c6e8501d9e739
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/dtflags.elf-x86-64
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/macho-universal-archive.x86_64.i386 b/test/tools/llvm-readobj/Inputs/macho-universal-archive.x86_64.i386
new file mode 100644
index 0000000000000..1660714c68ea8
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/macho-universal-archive.x86_64.i386
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/macho-universal.x86_64.i386 b/test/tools/llvm-readobj/Inputs/macho-universal.x86_64.i386
new file mode 100644
index 0000000000000..36d5fc29d6819
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/macho-universal.x86_64.i386
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/mips-options.elf-mips64el b/test/tools/llvm-readobj/Inputs/mips-options.elf-mips64el
new file mode 100755
index 0000000000000..4b6525731dd77
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/mips-options.elf-mips64el
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm b/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm
new file mode 100755
index 0000000000000..121d820b6b0f5
--- /dev/null
+++ b/test/tools/llvm-readobj/Inputs/trivial.exe.coff-arm
Binary files differ
diff --git a/test/tools/llvm-readobj/Inputs/trivial.ll b/test/tools/llvm-readobj/Inputs/trivial.ll
index 2cd7ec89e2460..f79b8b897691c 100644
--- a/test/tools/llvm-readobj/Inputs/trivial.ll
+++ b/test/tools/llvm-readobj/Inputs/trivial.ll
@@ -9,7 +9,7 @@
define i32 @main() nounwind {
entry:
- %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8]* @.str, i32 0, i32 0)) nounwind
+ %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) nounwind
tail call void bitcast (void (...)* @SomeOtherFunction to void ()*)() nounwind
ret i32 0
}
diff --git a/test/tools/llvm-readobj/codeview-linetables.test b/test/tools/llvm-readobj/codeview-linetables.test
index e5e344bf10ff3..b2acee1200b93 100644
--- a/test/tools/llvm-readobj/codeview-linetables.test
+++ b/test/tools/llvm-readobj/codeview-linetables.test
@@ -18,16 +18,16 @@
; z();
; }
; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-i368 \
RUN: | FileCheck %s -check-prefix MFUN32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-i368 \
RUN: | FileCheck %s -check-prefix MFUN32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2012-x86_64 \
RUN: | FileCheck %s -check-prefix MFUN64
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifunction-linetables.obj.coff-2013-x86_64 \
RUN: | FileCheck %s -check-prefix MFUN64
-MFUN32: CodeViewLineTables [
+MFUN32: CodeViewDebugInfo [
MFUN32-NEXT: Magic: 0x4
MFUN32-NEXT: Subsection [
MFUN32-NEXT: Type: 0xF1
@@ -136,7 +136,7 @@ MFUN32-NEXT: ]
MFUN32-NEXT: ]
MFUN32-NEXT: ]
-MFUN64: CodeViewLineTables [
+MFUN64: CodeViewDebugInfo [
MFUN64-NEXT: Magic: 0x4
MFUN64-NEXT: Subsection [
MFUN64-NEXT: Type: 0xF1
@@ -248,16 +248,16 @@ MFUN64-NEXT: ]
; g();
; }
; using 32-/64-bit versions of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-i368 \
RUN: | FileCheck %s -check-prefix MFILE32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2013-i368 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-i368 \
RUN: | FileCheck %s -check-prefix MFILE32
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2012-x86_64 \
RUN: | FileCheck %s -check-prefix MFILE64
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/multifile-linetables.obj.coff-2013-x86_64 \
RUN: | FileCheck %s -check-prefix MFILE64
-MFILE32: CodeViewLineTables [
+MFILE32: CodeViewDebugInfo [
MFILE32-NEXT: Magic: 0x4
MFILE32-NEXT: Subsection [
MFILE32-NEXT: Type: 0xF1
@@ -317,7 +317,7 @@ MFILE32-NEXT: ]
MFILE32-NEXT: ]
MFILE32-NEXT: ]
-MFILE64: CodeViewLineTables [
+MFILE64: CodeViewDebugInfo [
MFILE64-NEXT: Magic: 0x4
MFILE64-NEXT: Subsection [
MFILE64-NEXT: Type: 0xF1
@@ -387,9 +387,9 @@ MFILE64-NEXT: ]
; return 0;
; }
; using 32-version of CL v17.00.61030 and v18.00.21005.1 respectively.
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2012-i386 \
RUN: | FileCheck %s -check-prefix MCOMDAT
-RUN: llvm-readobj -s -codeview-linetables %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \
+RUN: llvm-readobj -s -codeview -section-symbols %p/Inputs/comdat-function-linetables.obj.coff-2013-i386 \
RUN: | FileCheck %s -check-prefix MCOMDAT
MCOMDAT: ProcStart {
diff --git a/test/tools/llvm-readobj/coff-arm-baserelocs.test b/test/tools/llvm-readobj/coff-arm-baserelocs.test
new file mode 100644
index 0000000000000..c0febd74aef4c
--- /dev/null
+++ b/test/tools/llvm-readobj/coff-arm-baserelocs.test
@@ -0,0 +1,7 @@
+# RUN: llvm-readobj -coff-basereloc %p/Inputs/trivial.exe.coff-arm | FileCheck %s
+
+# CHECK: Entry {
+# CHECK: Type: ARM_MOV32(T)
+# CHECK: Address: 0x9390
+# CHECK: }
+
diff --git a/test/tools/llvm-readobj/elf-dtflags.test b/test/tools/llvm-readobj/elf-dtflags.test
new file mode 100644
index 0000000000000..0ed1c7adf91dd
--- /dev/null
+++ b/test/tools/llvm-readobj/elf-dtflags.test
@@ -0,0 +1,6 @@
+// Test that llvm-readobj dumps DF_XXX and DF_1_XXX flags correctly.
+
+RUN: llvm-readobj -dynamic-table %p/Inputs/dtflags.elf-x86-64 | FileCheck %s
+
+CHECK: 0x000000000000001E FLAGS ORIGIN BIND_NOW
+CHECK: 0x000000006FFFFFFB FLAGS_1 NOW ORIGIN
diff --git a/test/tools/llvm-readobj/macho-universal-x86_64.i386.test b/test/tools/llvm-readobj/macho-universal-x86_64.i386.test
new file mode 100644
index 0000000000000..2138bb70ad3c0
--- /dev/null
+++ b/test/tools/llvm-readobj/macho-universal-x86_64.i386.test
@@ -0,0 +1,297 @@
+RUN: llvm-readobj -h %p/Inputs/macho-universal.x86_64.i386 \
+RUN: | FileCheck %s -check-prefix MULTIHEADER
+
+RUN: llvm-readobj -sections %p/Inputs/macho-universal.x86_64.i386 \
+RUN: | FileCheck %s -check-prefix MULTISECTIONS
+
+RUN: llvm-readobj -h %p/Inputs/macho-universal-archive.x86_64.i386 \
+RUN: | FileCheck %s -check-prefix MULTIHEADER-ARCHIVE
+
+RUN: llvm-readobj -sections %p/Inputs/macho-universal-archive.x86_64.i386 \
+RUN: | FileCheck %s -check-prefix MULTISECTIONS-ARCHIVE
+
+MULTIHEADER: Format: Mach-O 64-bit x86-64
+MULTIHEADER: Arch: x86_64
+MULTIHEADER: AddressSize: 64bit
+MULTIHEADER: MachHeader {
+MULTIHEADER: Magic: Magic64 (0xFEEDFACF)
+MULTIHEADER: CpuType: X86-64 (0x1000007)
+MULTIHEADER: CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
+MULTIHEADER: FileType: Executable (0x2)
+MULTIHEADER: NumOfLoadCommands: 16
+MULTIHEADER: SizeOfLoadCommands: 880
+MULTIHEADER: Flags [ (0x200085)
+MULTIHEADER: MH_DYLDLINK (0x4)
+MULTIHEADER: MH_NOUNDEFS (0x1)
+MULTIHEADER: MH_PIE (0x200000)
+MULTIHEADER: MH_TWOLEVEL (0x80)
+MULTIHEADER: ]
+MULTIHEADER: Reserved: 0x0
+MULTIHEADER: }
+
+MULTIHEADER: Format: Mach-O 32-bit i386
+MULTIHEADER: Arch: i386
+MULTIHEADER: AddressSize: 32bit
+MULTIHEADER: MachHeader {
+MULTIHEADER: Magic: Magic (0xFEEDFACE)
+MULTIHEADER: CpuType: X86 (0x7)
+MULTIHEADER: CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
+MULTIHEADER: FileType: Executable (0x2)
+MULTIHEADER: NumOfLoadCommands: 16
+MULTIHEADER: SizeOfLoadCommands: 716
+MULTIHEADER: Flags [ (0x1200085)
+MULTIHEADER: MH_DYLDLINK (0x4)
+MULTIHEADER: MH_NOUNDEFS (0x1)
+MULTIHEADER: MH_NO_HEAP_EXECUTION (0x1000000)
+MULTIHEADER: MH_PIE (0x200000)
+MULTIHEADER: MH_TWOLEVEL (0x80)
+MULTIHEADER: ]
+MULTIHEADER: }
+
+
+
+MULTISECTIONS: Format: Mach-O 64-bit x86-64
+MULTISECTIONS: Arch: x86_64
+MULTISECTIONS: AddressSize: 64bit
+MULTISECTIONS: Sections [
+MULTISECTIONS: Section {
+MULTISECTIONS: Index: 0
+MULTISECTIONS: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Address: 0x100000F60
+MULTISECTIONS: Size: 0x12
+MULTISECTIONS: Offset: 3936
+MULTISECTIONS: Alignment: 4
+MULTISECTIONS: RelocationOffset: 0x0
+MULTISECTIONS: RelocationCount: 0
+MULTISECTIONS: Type: 0x0
+MULTISECTIONS: Attributes [ (0x800004)
+MULTISECTIONS: PureInstructions (0x800000)
+MULTISECTIONS: SomeInstructions (0x4)
+MULTISECTIONS: ]
+MULTISECTIONS: Reserved1: 0x0
+MULTISECTIONS: Reserved2: 0x0
+MULTISECTIONS: }
+MULTISECTIONS: Section {
+MULTISECTIONS: Index: 1
+MULTISECTIONS: Name: __unwind_info (5F 5F 75 6E 77 69 6E 64 5F 69 6E 66 6F 00 00 00)
+MULTISECTIONS: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Address: 0x100000F72
+MULTISECTIONS: Size: 0x48
+MULTISECTIONS: Offset: 3954
+MULTISECTIONS: Alignment: 0
+MULTISECTIONS: RelocationOffset: 0x0
+MULTISECTIONS: RelocationCount: 0
+MULTISECTIONS: Type: 0x0
+MULTISECTIONS: Attributes [ (0x0)
+MULTISECTIONS: ]
+MULTISECTIONS: Reserved1: 0x0
+MULTISECTIONS: Reserved2: 0x0
+MULTISECTIONS: }
+MULTISECTIONS: Section {
+MULTISECTIONS: Index: 2
+MULTISECTIONS: Name: __eh_frame (5F 5F 65 68 5F 66 72 61 6D 65 00 00 00 00 00 00)
+MULTISECTIONS: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Address: 0x100000FC0
+MULTISECTIONS: Size: 0x40
+MULTISECTIONS: Offset: 4032
+MULTISECTIONS: Alignment: 3
+MULTISECTIONS: RelocationOffset: 0x0
+MULTISECTIONS: RelocationCount: 0
+MULTISECTIONS: Type: 0x0
+MULTISECTIONS: Attributes [ (0x0)
+MULTISECTIONS: ]
+MULTISECTIONS: Reserved1: 0x0
+MULTISECTIONS: Reserved2: 0x0
+MULTISECTIONS: }
+MULTISECTIONS: ]
+
+MULTISECTIONS: Format: Mach-O 32-bit i386
+MULTISECTIONS: Arch: i386
+MULTISECTIONS: AddressSize: 32bit
+MULTISECTIONS: Sections [
+MULTISECTIONS: Section {
+MULTISECTIONS: Index: 0
+MULTISECTIONS: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Address: 0x1FA0
+MULTISECTIONS: Size: 0x15
+MULTISECTIONS: Offset: 4000
+MULTISECTIONS: Alignment: 4
+MULTISECTIONS: RelocationOffset: 0x0
+MULTISECTIONS: RelocationCount: 0
+MULTISECTIONS: Type: 0x0
+MULTISECTIONS: Attributes [ (0x800004)
+MULTISECTIONS: PureInstructions (0x800000)
+MULTISECTIONS: SomeInstructions (0x4)
+MULTISECTIONS: ]
+MULTISECTIONS: Reserved1: 0x0
+MULTISECTIONS: Reserved2: 0x0
+MULTISECTIONS: }
+MULTISECTIONS: Section {
+MULTISECTIONS: Index: 1
+MULTISECTIONS: Name: __unwind_info (5F 5F 75 6E 77 69 6E 64 5F 69 6E 66 6F 00 00 00)
+MULTISECTIONS: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS: Address: 0x1FB5
+MULTISECTIONS: Size: 0x48
+MULTISECTIONS: Offset: 4021
+MULTISECTIONS: Alignment: 0
+MULTISECTIONS: RelocationOffset: 0x0
+MULTISECTIONS: RelocationCount: 0
+MULTISECTIONS: Type: 0x0
+MULTISECTIONS: Attributes [ (0x0)
+MULTISECTIONS: ]
+MULTISECTIONS: Reserved1: 0x0
+MULTISECTIONS: Reserved2: 0x0
+MULTISECTIONS: }
+MULTISECTIONS: ]
+
+MULTIHEADER-ARCHIVE: File: hello.o
+MULTIHEADER-ARCHIVE: Format: Mach-O 64-bit x86-64
+MULTIHEADER-ARCHIVE: Arch: x86_64
+MULTIHEADER-ARCHIVE: AddressSize: 64bit
+MULTIHEADER-ARCHIVE: MachHeader {
+MULTIHEADER-ARCHIVE: Magic: Magic64 (0xFEEDFACF)
+MULTIHEADER-ARCHIVE: CpuType: X86-64 (0x1000007)
+MULTIHEADER-ARCHIVE: CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
+MULTIHEADER-ARCHIVE: FileType: Relocatable (0x1)
+MULTIHEADER-ARCHIVE: NumOfLoadCommands: 3
+MULTIHEADER-ARCHIVE: SizeOfLoadCommands: 496
+MULTIHEADER-ARCHIVE: Flags [ (0x2000)
+MULTIHEADER-ARCHIVE: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
+MULTIHEADER-ARCHIVE: ]
+MULTIHEADER-ARCHIVE: Reserved: 0x0
+MULTIHEADER-ARCHIVE: }
+MULTIHEADER-ARCHIVE: File: foo.o
+MULTIHEADER-ARCHIVE: Format: Mach-O 32-bit i386
+MULTIHEADER-ARCHIVE: Arch: i386
+MULTIHEADER-ARCHIVE: AddressSize: 32bit
+MULTIHEADER-ARCHIVE: MachHeader {
+MULTIHEADER-ARCHIVE: Magic: Magic (0xFEEDFACE)
+MULTIHEADER-ARCHIVE: CpuType: X86 (0x7)
+MULTIHEADER-ARCHIVE: CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
+MULTIHEADER-ARCHIVE: FileType: Relocatable (0x1)
+MULTIHEADER-ARCHIVE: NumOfLoadCommands: 3
+MULTIHEADER-ARCHIVE: SizeOfLoadCommands: 296
+MULTIHEADER-ARCHIVE: Flags [ (0x2000)
+MULTIHEADER-ARCHIVE: MH_SUBSECTIONS_VIA_SYMBOLS (0x2000)
+MULTIHEADER-ARCHIVE: ]
+MULTIHEADER-ARCHIVE: }
+
+MULTISECTIONS-ARCHIVE: File: hello.o
+MULTISECTIONS-ARCHIVE: Format: Mach-O 64-bit x86-64
+MULTISECTIONS-ARCHIVE: Arch: x86_64
+MULTISECTIONS-ARCHIVE: AddressSize: 64bit
+MULTISECTIONS-ARCHIVE: Sections [
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 0
+MULTISECTIONS-ARCHIVE: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x0
+MULTISECTIONS-ARCHIVE: Size: 0x3B
+MULTISECTIONS-ARCHIVE: Offset: 528
+MULTISECTIONS-ARCHIVE: Alignment: 4
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x2B8
+MULTISECTIONS-ARCHIVE: RelocationCount: 2
+MULTISECTIONS-ARCHIVE: Type: 0x0
+MULTISECTIONS-ARCHIVE: Attributes [ (0x800004)
+MULTISECTIONS-ARCHIVE: PureInstructions (0x800000)
+MULTISECTIONS-ARCHIVE: SomeInstructions (0x4)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 1
+MULTISECTIONS-ARCHIVE: Name: __cstring (5F 5F 63 73 74 72 69 6E 67 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x3B
+MULTISECTIONS-ARCHIVE: Size: 0xD
+MULTISECTIONS-ARCHIVE: Offset: 587
+MULTISECTIONS-ARCHIVE: Alignment: 0
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
+MULTISECTIONS-ARCHIVE: RelocationCount: 0
+MULTISECTIONS-ARCHIVE: Type: ExtReloc (0x2)
+MULTISECTIONS-ARCHIVE: Attributes [ (0x0)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 2
+MULTISECTIONS-ARCHIVE: Name: __compact_unwind (5F 5F 63 6F 6D 70 61 63 74 5F 75 6E 77 69 6E 64)
+MULTISECTIONS-ARCHIVE: Segment: __LD (5F 5F 4C 44 00 00 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x48
+MULTISECTIONS-ARCHIVE: Size: 0x20
+MULTISECTIONS-ARCHIVE: Offset: 600
+MULTISECTIONS-ARCHIVE: Alignment: 3
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x2C8
+MULTISECTIONS-ARCHIVE: RelocationCount: 1
+MULTISECTIONS-ARCHIVE: Type: 0x0
+MULTISECTIONS-ARCHIVE: Attributes [ (0x20000)
+MULTISECTIONS-ARCHIVE: Debug (0x20000)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 3
+MULTISECTIONS-ARCHIVE: Name: __eh_frame (5F 5F 65 68 5F 66 72 61 6D 65 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x68
+MULTISECTIONS-ARCHIVE: Size: 0x40
+MULTISECTIONS-ARCHIVE: Offset: 632
+MULTISECTIONS-ARCHIVE: Alignment: 3
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
+MULTISECTIONS-ARCHIVE: RelocationCount: 0
+MULTISECTIONS-ARCHIVE: Type: 0xB
+MULTISECTIONS-ARCHIVE: Attributes [ (0x680000)
+MULTISECTIONS-ARCHIVE: LiveSupport (0x80000)
+MULTISECTIONS-ARCHIVE: NoTOC (0x400000)
+MULTISECTIONS-ARCHIVE: StripStaticSyms (0x200000)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: File: foo.o
+MULTISECTIONS-ARCHIVE: Format: Mach-O 32-bit i386
+MULTISECTIONS-ARCHIVE: Arch: i386
+MULTISECTIONS-ARCHIVE: AddressSize: 32bit
+MULTISECTIONS-ARCHIVE: Sections [
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 0
+MULTISECTIONS-ARCHIVE: Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x0
+MULTISECTIONS-ARCHIVE: Size: 0x5
+MULTISECTIONS-ARCHIVE: Offset: 324
+MULTISECTIONS-ARCHIVE: Alignment: 4
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
+MULTISECTIONS-ARCHIVE: RelocationCount: 0
+MULTISECTIONS-ARCHIVE: Type: 0x0
+MULTISECTIONS-ARCHIVE: Attributes [ (0x800004)
+MULTISECTIONS-ARCHIVE: PureInstructions (0x800000)
+MULTISECTIONS-ARCHIVE: SomeInstructions (0x4)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: Section {
+MULTISECTIONS-ARCHIVE: Index: 1
+MULTISECTIONS-ARCHIVE: Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00)
+MULTISECTIONS-ARCHIVE: Address: 0x8
+MULTISECTIONS-ARCHIVE: Size: 0x4
+MULTISECTIONS-ARCHIVE: Offset: 332
+MULTISECTIONS-ARCHIVE: Alignment: 2
+MULTISECTIONS-ARCHIVE: RelocationOffset: 0x0
+MULTISECTIONS-ARCHIVE: RelocationCount: 0
+MULTISECTIONS-ARCHIVE: Type: 0x0
+MULTISECTIONS-ARCHIVE: Attributes [ (0x0)
+MULTISECTIONS-ARCHIVE: ]
+MULTISECTIONS-ARCHIVE: Reserved1: 0x0
+MULTISECTIONS-ARCHIVE: Reserved2: 0x0
+MULTISECTIONS-ARCHIVE: }
+MULTISECTIONS-ARCHIVE: ]
+
diff --git a/test/tools/llvm-readobj/mips-abiflags.test b/test/tools/llvm-readobj/mips-abiflags.test
new file mode 100644
index 0000000000000..b4c769be20731
--- /dev/null
+++ b/test/tools/llvm-readobj/mips-abiflags.test
@@ -0,0 +1,42 @@
+RUN: llvm-readobj -mips-abi-flags %p/Inputs/abiflags.obj.elf-mipsel | \
+RUN: FileCheck -check-prefix=EL64 %s
+RUN: llvm-readobj -mips-abi-flags %p/Inputs/abiflags.obj.elf-mips | \
+RUN: FileCheck -check-prefix=BE32 %s
+
+EL64: MIPS ABI Flags {
+EL64-NEXT: Version: 0
+EL64-NEXT: ISA: MIPS64r5
+EL64-NEXT: ISA Extension: Cavium Networks Octeon3 (0x13)
+EL64-NEXT: ASEs [ (0x103)
+EL64-NEXT: DSP (0x1)
+EL64-NEXT: DSPR2 (0x2)
+EL64-NEXT: VZ (0x100)
+EL64-NEXT: ]
+EL64-NEXT: FP ABI: Hard float (double precision) (0x1)
+EL64-NEXT: GPR size: 64
+EL64-NEXT: CPR1 size: 64
+EL64-NEXT: CPR2 size: 0
+EL64-NEXT: Flags 1 [ (0x1)
+EL64-NEXT: ODDSPREG (0x1)
+EL64-NEXT: ]
+EL64-NEXT: Flags 2: 0x0
+EL64-NEXT: }
+
+BE32: MIPS ABI Flags {
+BE32-NEXT: Version: 0
+BE32-NEXT: ISA: MIPS32r2
+BE32-NEXT: ISA Extension: None (0x0)
+BE32-NEXT: ASEs [ (0x803)
+BE32-NEXT: DSP (0x1)
+BE32-NEXT: DSPR2 (0x2)
+BE32-NEXT: microMIPS (0x800)
+BE32-NEXT: ]
+BE32-NEXT: FP ABI: Soft float (0x3)
+BE32-NEXT: GPR size: 32
+BE32-NEXT: CPR1 size: 0
+BE32-NEXT: CPR2 size: 0
+BE32-NEXT: Flags 1 [ (0x1)
+BE32-NEXT: ODDSPREG (0x1)
+BE32-NEXT: ]
+BE32-NEXT: Flags 2: 0x0
+BE32-NEXT: }
diff --git a/test/tools/llvm-readobj/mips-options.test b/test/tools/llvm-readobj/mips-options.test
new file mode 100644
index 0000000000000..7a2959dd0325c
--- /dev/null
+++ b/test/tools/llvm-readobj/mips-options.test
@@ -0,0 +1,22 @@
+# Check DT_MIPS_OPTIONS .dynamic section tag reading
+
+RUN: llvm-readobj -dynamic-table %p/Inputs/mips-options.elf-mips64el | \
+RUN: FileCheck %s
+
+CHECK: DynamicSection [ (14 entries)
+CHECK-NEXT: Tag Type Name/Value
+CHECK-NEXT: 0x0000000000000004 HASH 0x158
+CHECK-NEXT: 0x0000000000000005 STRTAB 0x1C0
+CHECK-NEXT: 0x0000000000000006 SYMTAB 0x178
+CHECK-NEXT: 0x000000000000000A STRSZ 7 (bytes)
+CHECK-NEXT: 0x000000000000000B SYMENT 24 (bytes)
+CHECK-NEXT: 0x0000000070000001 MIPS_RLD_VERSION 1
+CHECK-NEXT: 0x0000000070000005 MIPS_FLAGS NOTPOT
+CHECK-NEXT: 0x0000000070000006 MIPS_BASE_ADDRESS 0x0
+CHECK-NEXT: 0x000000007000000A MIPS_LOCAL_GOTNO 2
+CHECK-NEXT: 0x0000000070000011 MIPS_SYMTABNO 3
+CHECK-NEXT: 0x0000000070000013 MIPS_GOTSYM 0x3
+CHECK-NEXT: 0x0000000000000003 PLTGOT 0x2000
+CHECK-NEXT: 0x0000000070000029 MIPS_OPTIONS 0x1000
+CHECK-NEXT: 0x0000000000000000 NULL 0x0
+CHECK-NEXT: ]
diff --git a/test/tools/llvm-readobj/program-headers.test b/test/tools/llvm-readobj/program-headers.test
index f014c03904202..8e8855d8b8e8b 100644
--- a/test/tools/llvm-readobj/program-headers.test
+++ b/test/tools/llvm-readobj/program-headers.test
@@ -83,10 +83,22 @@ ELF-MIPS-NEXT: AddressSize: 32bit
ELF-MIPS-NEXT: LoadName:
ELF-MIPS-NEXT: ProgramHeaders [
ELF-MIPS-NEXT: ProgramHeader {
+ELF-MIPS-NEXT: Type: PT_MIPS_ABIFLAGS (0x70000003)
+ELF-MIPS-NEXT: Offset: 0x98
+ELF-MIPS-NEXT: VirtualAddress: 0x400098
+ELF-MIPS-NEXT: PhysicalAddress: 0x400098
+ELF-MIPS-NEXT: FileSize: 24
+ELF-MIPS-NEXT: MemSize: 24
+ELF-MIPS-NEXT: Flags [ (0x4)
+ELF-MIPS-NEXT: PF_R (0x4)
+ELF-MIPS-NEXT: ]
+ELF-MIPS-NEXT: Alignment: 8
+ELF-MIPS-NEXT: }
+ELF-MIPS-NEXT: ProgramHeader {
ELF-MIPS-NEXT: Type: PT_MIPS_REGINFO (0x70000000)
-ELF-MIPS-NEXT: Offset: 0x74
-ELF-MIPS-NEXT: VirtualAddress: 0x400074
-ELF-MIPS-NEXT: PhysicalAddress: 0x400074
+ELF-MIPS-NEXT: Offset: 0xB0
+ELF-MIPS-NEXT: VirtualAddress: 0x4000B0
+ELF-MIPS-NEXT: PhysicalAddress: 0x4000B0
ELF-MIPS-NEXT: FileSize: 24
ELF-MIPS-NEXT: MemSize: 24
ELF-MIPS-NEXT: Flags [ (0x4)
@@ -99,8 +111,8 @@ ELF-MIPS-NEXT: Type: PT_LOAD (0x1)
ELF-MIPS-NEXT: Offset: 0x0
ELF-MIPS-NEXT: VirtualAddress: 0x400000
ELF-MIPS-NEXT: PhysicalAddress: 0x400000
-ELF-MIPS-NEXT: FileSize: 160
-ELF-MIPS-NEXT: MemSize: 160
+ELF-MIPS-NEXT: FileSize: 224
+ELF-MIPS-NEXT: MemSize: 224
ELF-MIPS-NEXT: Flags [ (0x5)
ELF-MIPS-NEXT: PF_R (0x4)
ELF-MIPS-NEXT: PF_X (0x1)