# RUN: yaml2obj %s --docnum=1 -o %t.i386 # RUN: llvm-readobj -h %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 # RUN: llvm-readobj --file-header %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 # RUN: llvm-readobj --file-headers %t.i386 | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.i386 --check-prefix I386 # I386:File: [[FILE]] # I386-NEXT:Format: elf32-i386 # I386-NEXT:Arch: i386 # I386-NEXT:AddressSize: 32bit # I386-NEXT:LoadName: # I386-NEXT:ElfHeader { # I386-NEXT: Ident { # I386-NEXT: Magic: (7F 45 4C 46) # I386-NEXT: Class: 32-bit (0x1) # I386-NEXT: DataEncoding: LittleEndian (0x1) # I386-NEXT: FileVersion: 1 # I386-NEXT: OS/ABI: GNU/Linux (0x3) # I386-NEXT: ABIVersion: 0 # I386-NEXT: Unused: (00 00 00 00 00 00 00) # I386-NEXT: } # I386-NEXT: Type: Relocatable (0x1) # I386-NEXT: Machine: EM_386 (0x3) # I386-NEXT: Version: 1 # I386-NEXT: Entry: 0x0 # I386-NEXT: ProgramHeaderOffset: 0x0 # I386-NEXT: SectionHeaderOffset: 0x48 # I386-NEXT: Flags [ (0x0) # I386-NEXT: ] # I386-NEXT: HeaderSize: 52 # I386-NEXT: ProgramHeaderEntrySize: 0 # I386-NEXT: ProgramHeaderCount: 0 # I386-NEXT: SectionHeaderEntrySize: 40 # I386-NEXT: SectionHeaderCount: 3 # I386-NEXT: StringTableSectionIndex: 2 # I386-NEXT:} # I386-NOT:{{.}} --- !ELF FileHeader: Class: ELFCLASS32 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_386 # RUN: yaml2obj %s --docnum=2 -o %t.x86-64 # RUN: llvm-readobj -h %t.x86-64 \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 # RUN: llvm-readobj --file-header %t.x86-64 \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 # RUN: llvm-readobj --file-headers %t.x86-64 \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.x86-64 --check-prefix X86-64 # X86-64:File: [[FILE]] # X86-64-NEXT:Format: elf64-x86-64 # X86-64-NEXT:Arch: x86_64 # X86-64-NEXT:AddressSize: 64bit # X86-64-NEXT:LoadName: # X86-64-NEXT:ElfHeader { # X86-64-NEXT: Ident { # X86-64-NEXT: Magic: (7F 45 4C 46) # X86-64-NEXT: Class: 64-bit (0x2) # X86-64-NEXT: DataEncoding: LittleEndian (0x1) # X86-64-NEXT: FileVersion: 1 # X86-64-NEXT: OS/ABI: GNU/Linux (0x3) # X86-64-NEXT: ABIVersion: 0 # X86-64-NEXT: Unused: (00 00 00 00 00 00 00) # X86-64-NEXT: } # X86-64-NEXT: Type: Relocatable (0x1) # X86-64-NEXT: Machine: EM_X86_64 (0x3E) # X86-64-NEXT: Version: 1 # X86-64-NEXT: Entry: 0x0 # X86-64-NEXT: ProgramHeaderOffset: 0x0 # X86-64-NEXT: SectionHeaderOffset: 0x58 # X86-64-NEXT: Flags [ (0x0) # X86-64-NEXT: ] # X86-64-NEXT: HeaderSize: 64 # X86-64-NEXT: ProgramHeaderEntrySize: 0 # X86-64-NEXT: ProgramHeaderCount: 0 # X86-64-NEXT: SectionHeaderEntrySize: 64 # X86-64-NEXT: SectionHeaderCount: 3 # X86-64-NEXT: StringTableSectionIndex: 2 # X86-64-NEXT:} # X86-64-NOT:{{.}} --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB OSABI: ELFOSABI_GNU Type: ET_REL Machine: EM_X86_64 # RUN: yaml2obj %s --docnum=3 -o %t.lanai # RUN: llvm-readobj -h %t.lanai \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI # RUN: llvm-readobj --file-header %t.lanai \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI # RUN: llvm-readobj --file-headers %t.lanai \ # RUN: | FileCheck %s --strict-whitespace --match-full-lines -DFILE=%t.lanai --check-prefix LANAI --- !ELF FileHeader: Class: ELFCLASS32 Data: ELFDATA2MSB Type: ET_REL Machine: EM_LANAI # LANAI:File: [[FILE]] # LANAI-NEXT:Format: elf32-lanai # LANAI-NEXT:Arch: lanai # LANAI-NEXT:AddressSize: 32bit # LANAI-NEXT:LoadName: # LANAI-NEXT:ElfHeader { # LANAI-NEXT: Ident { # LANAI-NEXT: Magic: (7F 45 4C 46) # LANAI-NEXT: Class: 32-bit (0x1) # LANAI-NEXT: DataEncoding: BigEndian (0x2) # LANAI-NEXT: FileVersion: 1 # LANAI-NEXT: OS/ABI: SystemV (0x0) # LANAI-NEXT: ABIVersion: 0 # LANAI-NEXT: Unused: (00 00 00 00 00 00 00) # LANAI-NEXT: } # LANAI-NEXT: Type: Relocatable (0x1) # LANAI-NEXT: Machine: EM_LANAI (0xF4) # LANAI-NEXT: Version: 1 # LANAI-NEXT: Entry: 0x0 # LANAI-NEXT: ProgramHeaderOffset: 0x0 # LANAI-NEXT: SectionHeaderOffset: 0x48 # LANAI-NEXT: Flags [ (0x0) # LANAI-NEXT: ] # LANAI-NEXT: HeaderSize: 52 # LANAI-NEXT: ProgramHeaderEntrySize: 0 # LANAI-NEXT: ProgramHeaderCount: 0 # LANAI-NEXT: SectionHeaderEntrySize: 40 # LANAI-NEXT: SectionHeaderCount: 3 # LANAI-NEXT: StringTableSectionIndex: 2 # LANAI-NEXT:} # LANAI-NOT:{{.}} ## Check we are able to dump the file header when the section header table can't be read. # RUN: yaml2obj %s --docnum=4 -o %t.invalid1 # RUN: not llvm-readobj --file-headers %t.invalid1 2>&1 \ # RUN: | FileCheck %s --implicit-check-not=warning: -DFILE=%t.invalid1 \ # RUN: -DSECHDRCOUNT=8192 -DSECHDRSTRTABINDEX=12288 --check-prefix=INVALID-LLVM # RUN: not llvm-readelf --file-headers %t.invalid1 2>&1 \ # RUN: | FileCheck %s --implicit-check-not=warning: -DFILE=%t.invalid1 \ # RUN: -DSECHDRCOUNT=8192 -DSECHDRSTRTABINDEX=12288 --check-prefix=INVALID-GNU # INVALID-LLVM: File: [[FILE]] # INVALID-LLVM-NEXT: Format: elf64-unknown # INVALID-LLVM-NEXT: Arch: unknown # INVALID-LLVM-NEXT: AddressSize: 64bit # INVALID-LLVM-NEXT: LoadName: # INVALID-LLVM-NEXT: ElfHeader { # INVALID-LLVM-NEXT: Ident { # INVALID-LLVM-NEXT: Magic: (7F 45 4C 46) # INVALID-LLVM-NEXT: Class: 64-bit (0x2) # INVALID-LLVM-NEXT: DataEncoding: LittleEndian (0x1) # INVALID-LLVM-NEXT: FileVersion: 1 # INVALID-LLVM-NEXT: OS/ABI: SystemV (0x0) # INVALID-LLVM-NEXT: ABIVersion: 0 # INVALID-LLVM-NEXT: Unused: (00 00 00 00 00 00 00) # INVALID-LLVM-NEXT: } # INVALID-LLVM-NEXT: Type: Relocatable (0x1) # INVALID-LLVM-NEXT: Machine: EM_NONE (0x0) # INVALID-LLVM-NEXT: Version: 1 # INVALID-LLVM-NEXT: Entry: 0x0 # INVALID-LLVM-NEXT: ProgramHeaderOffset: 0x0 # INVALID-LLVM-NEXT: SectionHeaderOffset: 0x1000 # INVALID-LLVM-NEXT: Flags [ (0x0) # INVALID-LLVM-NEXT: ] # INVALID-LLVM-NEXT: HeaderSize: 64 # INVALID-LLVM-NEXT: ProgramHeaderEntrySize: 0 # INVALID-LLVM-NEXT: ProgramHeaderCount: 0 # INVALID-LLVM-NEXT: SectionHeaderEntrySize: 64 # INVALID-LLVM-NEXT: SectionHeaderCount: [[SECHDRCOUNT]] # INVALID-LLVM-NEXT: StringTableSectionIndex: [[SECHDRSTRTABINDEX]] # INVALID-LLVM-NEXT: } # INVALID-LLVM-NEXT: error: '[[FILE]]': unable to continue dumping, the file is corrupt: section header table goes past the end of the file: e_shoff = 0x1000 # INVALID-GNU: ELF Header: # INVALID-GNU-NEXT: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 # INVALID-GNU-NEXT: Class: ELF64 # INVALID-GNU-NEXT: Data: 2's complement, little endian # INVALID-GNU-NEXT: Version: 1 (current) # INVALID-GNU-NEXT: OS/ABI: UNIX - System V # INVALID-GNU-NEXT: ABI Version: 0 # INVALID-GNU-NEXT: Type: REL (Relocatable file) # INVALID-GNU-NEXT: Machine: None # INVALID-GNU-NEXT: Version: 0x1 # INVALID-GNU-NEXT: Entry point address: 0x0 # INVALID-GNU-NEXT: Start of program headers: 0 (bytes into file) # INVALID-GNU-NEXT: Start of section headers: 4096 (bytes into file) # INVALID-GNU-NEXT: Flags: 0x0 # INVALID-GNU-NEXT: Size of this header: 64 (bytes) # INVALID-GNU-NEXT: Size of program headers: 0 (bytes) # INVALID-GNU-NEXT: Number of program headers: 0 # INVALID-GNU-NEXT: Size of section headers: 64 (bytes) # INVALID-GNU-NEXT: Number of section headers: [[SECHDRCOUNT]] # INVALID-GNU-NEXT: Section header string table index: [[SECHDRSTRTABINDEX]] # INVALID-GNU-NEXT: error: '[[FILE]]': unable to continue dumping, the file is corrupt: section header table goes past the end of the file: e_shoff = 0x1000 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL ## The section header table offset goes past the EOF. EShOff: 0x1000 ## The number of section headers is too large, the file is ## too little to contain so many sections. EShNum: [[SHNUM=0x2000]] ## The index of the section name string table is too large. ## The section would be past the EOF. EShStrNdx: [[SHSTRNDX=0x3000]] Sections: - Type: SectionHeaderTable NoHeaders: true ## Check we don't dump anything except the file header when the section header table can't be read. # RUN: not llvm-readobj -a %t.invalid1 2>&1 \ # RUN: | FileCheck %s -DFILE=%t.invalid1 -DSECHDRCOUNT=8192 -DSECHDRSTRTABINDEX=12288 --check-prefix=INVALID-LLVM # RUN: not llvm-readelf -a %t.invalid1 2>&1 \ # RUN: | FileCheck %s -DFILE=%t.invalid1 -DSECHDRCOUNT=8192 -DSECHDRSTRTABINDEX=12288 --check-prefix=INVALID-GNU ## Check what we print when e_shnum == 0, e_shstrndx == SHN_XINDEX and the section header table can't be read. # RUN: yaml2obj %s -DSHNUM=0 -DSHSTRNDX=0xffff --docnum=4 -o %t.invalid2 # RUN: not llvm-readobj --file-headers %t.invalid2 2>&1 \ # RUN: | FileCheck %s -DFILE=%t.invalid2 -DSECHDRCOUNT="" -DSECHDRSTRTABINDEX="" --check-prefix=INVALID-LLVM # RUN: not llvm-readelf --file-headers %t.invalid2 2>&1 \ # RUN: | FileCheck %s -DFILE=%t.invalid2 -DSECHDRCOUNT="" -DSECHDRSTRTABINDEX="" --check-prefix=INVALID-GNU