Index: test/tools/llvm-readobj/headers.test =================================================================== --- /dev/null +++ test/tools/llvm-readobj/headers.test @@ -0,0 +1,45 @@ +RUN: llvm-readelf -e %p/Inputs/trivial.obj.elf-i386 | FileCheck %s +RUN: llvm-readelf --headers %p/Inputs/trivial.obj.elf-i386 | FileCheck %s +RUN: llvm-readelf --headers %p/Inputs/trivial.obj.elf-i386 \ +RUN: | FileCheck %s -check-prefix HEADERS + +CHECK: ELF Header: +CHECK-NEXT: Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00 +CHECK-NEXT: Class: ELF32 +CHECK-NEXT: Data: 2's complement, little endian +CHECK-NEXT: Version: 1 (current) +CHECK-NEXT: OS/ABI: UNIX - GNU +CHECK-NEXT: ABI Version: 0 +CHECK-NEXT: Type: REL (Relocatable file) +CHECK-NEXT: Machine: Intel 80386 +CHECK-NEXT: Version: 0x1 +CHECK-NEXT: Entry point address: 0x0 +CHECK-NEXT: Start of program headers: 0 (bytes into file) +CHECK-NEXT: Start of section headers: 200 (bytes into file) +CHECK-NEXT: Flags: 0x0 +CHECK-NEXT: Size of this header: 52 (bytes) +CHECK-NEXT: Size of program headers: 0 (bytes) +CHECK-NEXT: Number of program headers: 0 +CHECK-NEXT: Size of section headers: 40 (bytes) +CHECK-NEXT: Number of section headers: 10 +CHECK-NEXT: Section header string table index: 7 + +CHECK: Section Headers: +CHECK-NEXT: [Nr] Name Type Address Off Size ES Flg Lk Inf Al +CHECK-NEXT: [ 0] NULL 00000000 000000 000000 00 0 0 0 +CHECK-NEXT: [ 1] .text PROGBITS 00000000 000040 00002a 00 AX 0 0 16 +CHECK-NEXT: [ 2] .rel.text REL 00000000 000360 000020 08 8 1 4 +CHECK-NEXT: [ 3] .data PROGBITS 00000000 00006c 000000 00 WA 0 0 4 +CHECK-NEXT: [ 4] .bss NOBITS 00000000 00006c 000000 00 WA 0 0 4 +CHECK-NEXT: [ 5] .rodata.str1.1 PROGBITS 00000000 00006c 00000d 01 AMS 0 0 1 +CHECK-NEXT: [ 6] .note.GNU-stack PROGBITS 00000000 000079 000000 00 0 0 1 +CHECK-NEXT: [ 7] .shstrtab STRTAB 00000000 000079 00004f 00 0 0 1 +CHECK-NEXT: [ 8] .symtab SYMTAB 00000000 000258 0000c0 10 9 8 4 +CHECK-NEXT: [ 9] .strtab STRTAB 00000000 000318 000045 00 0 0 1 + + +CHECK: Program Headers: +CHECK-NEXT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align + +HEADERS-NOT: Relocation section +HEADERS-NOT: Symbol table Index: tools/llvm-readobj/llvm-readobj.cpp =================================================================== --- tools/llvm-readobj/llvm-readobj.cpp +++ tools/llvm-readobj/llvm-readobj.cpp @@ -57,6 +57,14 @@ "--section-groups and --elf-hash-histogram.")); cl::alias AllShort("a", cl::desc("Alias for --all"), cl::aliasopt(All)); + // --headers -e + cl::opt + Headers("headers", + cl::desc("Equivalent to setting: --file-headers, --program-headers, " + "--section-headers")); + cl::alias HeadersShort("e", cl::desc("Alias for --headers"), + cl::aliasopt(Headers)); + // -wide, -W cl::opt WideOutput("wide", cl::desc("Ignored for compatibility with GNU readelf"), @@ -666,6 +674,12 @@ opts::HashHistogram = true; } + if (opts::Headers) { + opts::FileHeaders = true; + opts::ProgramHeaders = true; + opts::SectionHeaders = true; + } + // Default to stdin if no filename is specified. if (opts::InputFilenames.size() == 0) opts::InputFilenames.push_back("-");