-RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-i386 \
-RUN: | FileCheck %s -check-prefix ELF32
-RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-i386 \
-RUN: | FileCheck %s -check-prefix ELF32
-RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-i386 \
-RUN: | FileCheck %s -check-prefix ELF32
-RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-x86-64 \
-RUN: | FileCheck %s -check-prefix ELF64
-RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-x86-64 \
-RUN: | FileCheck %s -check-prefix ELF64
-RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-x86-64 \
-RUN: | FileCheck %s -check-prefix ELF64
-RUN: llvm-readelf -h %p/Inputs/trivial.obj.elf-mipsel \
-RUN: | FileCheck %s -check-prefix MIPSEL
-RUN: llvm-readelf --file-header %p/Inputs/trivial.obj.elf-mipsel \
-RUN: | FileCheck %s -check-prefix MIPSEL
-RUN: llvm-readelf --file-headers %p/Inputs/trivial.obj.elf-mipsel \
-RUN: | FileCheck %s -check-prefix MIPSEL
+## In this test we test how llvm-readelf prints file headers.
-ELF32: ELF Header:
-ELF32-NEXT: Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00
-ELF32-NEXT: Class: ELF32
-ELF32-NEXT: Data: 2's complement, little endian
-ELF32-NEXT: Version: 1 (current)
-ELF32-NEXT: OS/ABI: UNIX - GNU
-ELF32-NEXT: ABI Version: 0
-ELF32-NEXT: Type: REL (Relocatable file)
-ELF32-NEXT: Machine: Intel 80386
-ELF32-NEXT: Version: 0x1
-ELF32-NEXT: Entry point address: 0x0
-ELF32-NEXT: Start of program headers: 0 (bytes into file)
-ELF32-NEXT: Start of section headers: 200 (bytes into file)
-ELF32-NEXT: Flags: 0x0
-ELF32-NEXT: Size of this header: 52 (bytes)
-ELF32-NEXT: Size of program headers: 0 (bytes)
-ELF32-NEXT: Number of program headers: 0
-ELF32-NEXT: Size of section headers: 40 (bytes)
-ELF32-NEXT: Number of section headers: 10
-ELF32-NEXT: Section header string table index: 7
+## Case 1: Test EM_386 object.
+# RUN: yaml2obj %s --docnum=1 -o %t1
+# RUN: llvm-readelf -h %t1 | FileCheck %s --check-prefix=I386
+# RUN: llvm-readelf --file-header %t1 \
+# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=I386
+# RUN: llvm-readelf --file-headers %t1 \
+# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=I386
-ELF64: ELF Header:
-ELF64-NEXT: Magic: 7f 45 4c 46 02 01 01 03 00 00 00 00 00 00 00 00
-ELF64-NEXT: Class: ELF64
-ELF64-NEXT: Data: 2's complement, little endian
-ELF64-NEXT: Version: 1 (current)
-ELF64-NEXT: OS/ABI: UNIX - GNU
-ELF64-NEXT: ABI Version: 0
-ELF64-NEXT: Type: REL (Relocatable file)
-ELF64-NEXT: Machine: Advanced Micro Devices X86-64
-ELF64-NEXT: Version: 0x1
-ELF64-NEXT: Entry point address: 0x0
-ELF64-NEXT: Start of program headers: 0 (bytes into file)
-ELF64-NEXT: Start of section headers: 184 (bytes into file)
-ELF64-NEXT: Flags: 0x0
-ELF64-NEXT: Size of this header: 64 (bytes)
-ELF64-NEXT: Size of program headers: 0 (bytes)
-ELF64-NEXT: Number of program headers: 0
-ELF64-NEXT: Size of section headers: 64 (bytes)
-ELF64-NEXT: Number of section headers: 10
-ELF64-NEXT: Section header string table index: 7
+# I386:ELF Header:
+# I386-NEXT: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+# I386-NEXT: Class: ELF32
+# I386-NEXT: Data: 2's complement, little endian
+# I386-NEXT: Version: 1 (current)
+# I386-NEXT: OS/ABI: UNIX - System V
+# I386-NEXT: ABI Version: 0x0
+# I386-NEXT: Type: REL (Relocatable file)
+# I386-NEXT: Machine: Intel 80386
+# I386-NEXT: Version: 0x1
+# I386-NEXT: Entry point address: 0x11223344
+# I386-NEXT: Start of program headers: 52 (bytes into file)
+# I386-NEXT: Start of section headers: 112 (bytes into file)
+# I386-NEXT: Flags: 0x0
+# I386-NEXT: Size of this header: 52 (bytes)
+# I386-NEXT: Size of program headers: 32 (bytes)
+# I386-NEXT: Number of program headers: 1
+# I386-NEXT: Size of section headers: 40 (bytes)
+# I386-NEXT: Number of section headers: 4
+# I386-NEXT: Section header string table index: 3
-MIPSEL: ELF Header:
-MIPSEL-NEXT: Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00
-MIPSEL-NEXT: Class: ELF32
-MIPSEL-NEXT: Data: 2's complement, little endian
-MIPSEL-NEXT: Version: 1 (current)
-MIPSEL-NEXT: OS/ABI: UNIX - GNU
-MIPSEL-NEXT: ABI Version: 0x0
-MIPSEL-NEXT: Type: REL (Relocatable file)
-MIPSEL-NEXT: Machine: MIPS R3000
-MIPSEL-NEXT: Version: 0x1
-MIPSEL-NEXT: Entry point address: 0x0
-MIPSEL-NEXT: Start of program headers: 0 (bytes into file)
-MIPSEL-NEXT: Start of section headers: 172 (bytes into file)
-MIPSEL-NEXT: Flags: 0x50001000, o32, mips32
-MIPSEL-NEXT: Size of this header: 52 (bytes)
-MIPSEL-NEXT: Size of program headers: 0 (bytes)
-MIPSEL-NEXT: Number of program headers: 0
-MIPSEL-NEXT: Size of section headers: 40 (bytes)
-MIPSEL-NEXT: Number of section headers: 9
-MIPSEL-NEXT: Section header string table index: 6
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_386
+ Entry: 0x11223344
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+
+## Case 2: Test EM_X86_64 object.
+# RUN: yaml2obj %s --docnum=2 -o %t2
+# RUN: llvm-readelf -h %t2 | FileCheck %s --check-prefix=X86-64
+# RUN: llvm-readelf --file-header %t2 \
+# RUN: | FileCheck %s --check-prefix=X86-64 --strict-whitespace --match-full-lines
+# RUN: llvm-readelf --file-headers %t2 \
+# RUN: | FileCheck %s --check-prefix=X86-64 --strict-whitespace --match-full-lines
+
+# X86-64:ELF Header:
+# X86-64-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
+# X86-64-NEXT: Class: ELF64
+# X86-64-NEXT: Data: 2's complement, little endian
+# X86-64-NEXT: Version: 1 (current)
+# X86-64-NEXT: OS/ABI: UNIX - System V
+# X86-64-NEXT: ABI Version: 0x0
+# X86-64-NEXT: Type: REL (Relocatable file)
+# X86-64-NEXT: Machine: Advanced Micro Devices X86-64
+# X86-64-NEXT: Version: 0x1
+# X86-64-NEXT: Entry point address: 0x1122334455667788
+# X86-64-NEXT: Start of program headers: 64 (bytes into file)
+# X86-64-NEXT: Start of section headers: 152 (bytes into file)
+# X86-64-NEXT: Flags: 0x0
+# X86-64-NEXT: Size of this header: 64 (bytes)
+# X86-64-NEXT: Size of program headers: 56 (bytes)
+# X86-64-NEXT: Number of program headers: 1
+# X86-64-NEXT: Size of section headers: 64 (bytes)
+# X86-64-NEXT: Number of section headers: 4
+# X86-64-NEXT: Section header string table index: 3
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
+ Entry: 0x1122334455667788
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
+
+## Case 3: Use an arbitrary machine type that allows to show how we print Flags.
+## Here we use an EM_MIPS object for that.
+# RUN: yaml2obj %s --docnum=3 -o %t3
+# RUN: llvm-readelf -h %t3 | FileCheck %s --check-prefix=MIPSEL
+# RUN: llvm-readelf --file-header %t3 \
+# RUN: | FileCheck %s --check-prefix=MIPSEL --strict-whitespace --match-full-lines
+# RUN: llvm-readelf --file-headers %t3 \
+# RUN: | FileCheck %s --check-prefix=MIPSEL --strict-whitespace --match-full-lines
+
+# MIPSEL:ELF Header:
+# MIPSEL-NEXT: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+# MIPSEL-NEXT: Class: ELF32
+# MIPSEL-NEXT: Data: 2's complement, little endian
+# MIPSEL-NEXT: Version: 1 (current)
+# MIPSEL-NEXT: OS/ABI: UNIX - System V
+# MIPSEL-NEXT: ABI Version: 0x0
+# MIPSEL-NEXT: Type: REL (Relocatable file)
+# MIPSEL-NEXT: Machine: MIPS R3000
+# MIPSEL-NEXT: Version: 0x1
+# MIPSEL-NEXT: Entry point address: 0x0
+# MIPSEL-NEXT: Start of program headers: 52 (bytes into file)
+# MIPSEL-NEXT: Start of section headers: 112 (bytes into file)
+# MIPSEL-NEXT: Flags: 0x50001000, o32, mips32
+# MIPSEL-NEXT: Size of this header: 52 (bytes)
+# MIPSEL-NEXT: Size of program headers: 32 (bytes)
+# MIPSEL-NEXT: Number of program headers: 1
+# MIPSEL-NEXT: Size of section headers: 40 (bytes)
+# MIPSEL-NEXT: Number of section headers: 4
+# MIPSEL-NEXT: Section header string table index: 3
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS32
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_MIPS
+ Flags: [ EF_MIPS_ARCH_32, EF_MIPS_ABI_O32 ]
+Sections:
+ - Name: .foo
+ Type: SHT_PROGBITS
+ProgramHeaders:
+ - Type: PT_LOAD
+ Flags: [ PF_R ]
## Test that the -x alias can be used flexibly. Create a baseline and ensure
## all other combinations are identical.
-# RUN: llvm-readelf --file-header --hex-dump=.text \
-# RUN: %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.out
-# RUN: llvm-readelf -h --hex-dump .text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.1
-# RUN: llvm-readelf -h -x .text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.2
-# RUN: llvm-readelf -h -x=.text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.3
-# RUN: llvm-readelf -h -x.text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.4
-# RUN: llvm-readelf -hx .text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.5
-# RUN: llvm-readelf -hx=.text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.6
-# RUN: llvm-readelf -hx.text %p/Inputs/trivial.obj.elf-x86-64 > %t.hexdump.7
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-readelf --file-header --hex-dump=.shstrtab %t > %t.hexdump.out
+# RUN: llvm-readelf -h --hex-dump .shstrtab %t > %t.hexdump.1
+# RUN: llvm-readelf -h -x .shstrtab %t > %t.hexdump.2
+# RUN: llvm-readelf -h -x=.shstrtab %t > %t.hexdump.3
+# RUN: llvm-readelf -h -x.shstrtab %t > %t.hexdump.4
+# RUN: llvm-readelf -hx .shstrtab %t > %t.hexdump.5
+# RUN: llvm-readelf -hx=.shstrtab %t > %t.hexdump.6
+# RUN: llvm-readelf -hx.shstrtab %t > %t.hexdump.7
# RUN: cmp %t.hexdump.out %t.hexdump.1
# RUN: cmp %t.hexdump.out %t.hexdump.2
# RUN: cmp %t.hexdump.out %t.hexdump.6
# RUN: cmp %t.hexdump.out %t.hexdump.7
-# RUN: llvm-readelf -S %p/Inputs/trivial.obj.elf-x86-64 | FileCheck %s --check-prefix=ELF-SEC
-
-## Both 9 and .strtab refer to .strtab. Test we dump the section only once.
-# RUN: llvm-readobj -x 9 -x 9 -x .strtab -x .strtab %p/Inputs/trivial.obj.elf-x86-64 2>&1 | \
-# RUN: FileCheck %s --check-prefix=ELF
-# RUN: llvm-readobj -x 9 -x .strtab -x 10 -x not_exist \
-# RUN: %p/Inputs/trivial.obj.elf-x86-64 2>&1 | FileCheck %s -DFILE=%p/Inputs/trivial.obj.elf-x86-64 --check-prefixes=ELF-WARN,ELF
+## A sanity check to verify that the .shstrtab section has index 2.
+# RUN: llvm-readelf -S %t | FileCheck %s --check-prefix=ELF-SEC
+# ELF-SEC: [ 2] .shstrtab
-# ELF-SEC: [ 9] .strtab
+## Test we dump the section only once when the option is specified multiple times for the same section.
+# RUN: llvm-readobj -x 2 -x 2 -x .shstrtab -x .shstrtab %t 2>&1 \
+# RUN: | FileCheck %s --check-prefix=ELF
+## Test warnings reported when an unknown section name and index are specified.
+# RUN: llvm-readobj -x 2 -x .shstrtab -x 3 -x not_exist %t 2>&1 \
+# RUN: | FileCheck %s -DFILE=%t --check-prefixes=ELF-WARN,ELF
# ELF-WARN: warning: '[[FILE]]': could not find section 'not_exist'
-# ELF-WARN: warning: '[[FILE]]': could not find section 10
-# ELF: Hex dump of section '.strtab':
-# ELF-NEXT: 0x00000000 00747269 7669616c 2e6c6c00 6d61696e .trivial.ll.main
-# ELF-NEXT: 0x00000010 002e4c2e 73747200 70757473 00536f6d ..L.str.puts.Som
-# ELF-NEXT: 0x00000020 654f7468 65724675 6e637469 6f6e005f eOtherFunction._
-# ELF-NEXT: 0x00000030 474c4f42 414c5f4f 46465345 545f5441 GLOBAL_OFFSET_TA
-# ELF-NEXT: 0x00000040 424c455f 00 BLE_.
+# ELF-WARN: warning: '[[FILE]]': could not find section 3
+# ELF: Hex dump of section '.shstrtab':
+# ELF-NEXT: 0x00000000 002e7368 73747274 6162002e 73747274 ..shstrtab..strt
+# ELF-NEXT: 0x00000010 616200 ab.
# ELF-NOT: {{.}}
## This test shows that we include the tool name in an error/warning message.
-
-# RUN: yaml2obj %s -o %t
# RUN: llvm-readelf -x 10 %t 2>&1 | FileCheck --check-prefix=WARN %s -DTOOL=readelf
# RUN: llvm-readobj -x 10 %t 2>&1 | FileCheck --check-prefix=WARN %s -DTOOL=readobj
--- !ELF
FileHeader:
- Class: ELFCLASS64
+ Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_DYN
- Machine: EM_RISCV
+ Machine: EM_386