## Check that llvm-objdump reports an error when ## .shstrtab has an invalid type. # RUN: yaml2obj %s --docnum=1 -o %t1 # RUN: not llvm-objdump -s %t1 2>&1 | FileCheck %s --check-prefix=INVALIDERR # INVALIDERR: Invalid data was encountered while parsing the file --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .shstrtab Type: SHT_PROGBITS ## Check that llvm-objdump reports an error when ## .shstrtab has an invalid zero-size. # RUN: yaml2obj %s --docnum=2 -o %t2 # RUN: not llvm-objdump -s %t2 2>&1 | FileCheck %s --check-prefix=INVALIDERR --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .shstrtab Type: SHT_STRTAB Size: 0 ## Check that llvm-objdump reports an error when .shstrtab has an invalid ## size that goes past the end of the file. # RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 \ # RUN: | FileCheck %s --check-prefix=INVALIDERR ## Check that llvm-dwarfdump reports an error during relocation resolution ## when instead of expected SHT_RELA section it locates a section of a different type. # RUN: yaml2obj %s --docnum=3 -o %t3 # RUN: not llvm-dwarfdump -debug-line %t3 2>&1 | FileCheck --check-prefix=RELA %s # RELA: Section is not SHT_RELA --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .debug_line Type: SHT_PROGBITS ## The exact content does not matter here. We can use any minimal valid debug section ## which is a target for relocation. The idea is to trigger the code that reads the ## relocation's addend during relocation resolution. It should fail if called on ## a non-SHT_RELA section. Content: 380000000200210000000101FB0E0D00010101010000000100000100676C6F62616C2E63707000000000000009020000000000000000130237000101 - Name: .rela.debug_line Type: SHT_REL Info: .debug_line Relocations: - Offset: 0x000000000000002E Type: R_X86_64_64 ## Check that llvm-objdump reports an error when it tries to dump section names ## and .shstrtab is not null-terminated. # RUN: yaml2obj %s --docnum=4 -o %t4 # RUN: not llvm-objdump -s %t4 2>&1 | FileCheck --check-prefix=INVALIDERR %s --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .shstrtab Type: SHT_STRTAB Content: "11" ## Check that llvm-objdump reports an error when it tries to dump a symbol name and ## .strtab is not null-terminated. # RUN: yaml2obj %s --docnum=5 -o %t5 # RUN: not llvm-objdump -syms %t5 2>&1 | FileCheck --check-prefix=NONULL %s # NONULL: string table non-null terminated --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .strtab Type: SHT_STRTAB Content: "11" Symbols: - Name: foo ## Check that llvm-readobj reports an error if .symtab has an invalid sh_entsize. # RUN: yaml2obj %s --docnum=6 -o %t6 # RUN: not llvm-readobj --symbols %t6 2>&1 | FileCheck --check-prefix=INVALID-SYM-SIZE %s # INVALID-SYM-SIZE: invalid sh_entsize --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .symtab Type: SHT_SYMTAB EntSize: 32 Symbols: - Name: foo ## Check that llvm-readobj reports an error if .dynsym has an invalid sh_entsize. # RUN: yaml2obj %s --docnum=7 -o %t7 # RUN: not llvm-readobj --dyn-symbols %t7 2>&1 | FileCheck --check-prefix=INVALID-DYNSYM-SIZE %s # INVALID-DYNSYM-SIZE: error: Invalid entity size --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .dynsym Type: SHT_DYNSYM EntSize: 32 DynamicSymbols: - Name: foo ## Check that llvm-readobj reports an error if .symtab has an invalid sh_link value, ## which is greater than number of sections. # RUN: yaml2obj %s --docnum=8 -o %t8 # RUN: not llvm-readobj --symbols %t8 2>&1 | FileCheck --check-prefix=INVALID-SYMTAB-LINK %s # INVALID-SYMTAB-LINK: invalid section index --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .symtab Type: SHT_SYMTAB Link: 0xFF ## Check that llvm-readobj reports an error when trying to dump sections ## when the e_shentsize field is broken. # RUN: yaml2obj %s --docnum=9 -o %t9 # RUN: not llvm-readobj -S %t9 2>&1 | FileCheck --check-prefix=INVALID-SH-ENTSIZE %s # INVALID-SH-ENTSIZE: invalid section header entry size (e_shentsize) in ELF header --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 SHEntSize: 1 ## Check that llvm-readobj reports an error if .symtab has sh_size ## that is not a multiple of sh_entsize. # RUN: yaml2obj %s --docnum=10 -o %t10 # RUN: not llvm-readobj --symbols %t10 2>&1 | FileCheck --check-prefix=INVALID-SYMTAB-SIZE %s # INVALID-SYMTAB-SIZE: size is not a multiple of sh_entsize --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .symtab Type: SHT_SYMTAB Size: 1 ## Test that llvm-readobj reports an error if SHT_SYMTAB_SHNDX section has ## invalid sh_size which should be: ## sizeof(.symtab_shndx) = (sizeof(.symtab) / entsize(.symtab)) * entsize(.symtab_shndx) # RUN: yaml2obj %s --docnum=11 -o %t11 # RUN: not llvm-readobj --symbols %t11 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s # INVALID-XINDEX-SIZE: invalid section contents size --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_DYN Machine: EM_X86_64 Sections: - Name: .symtab_shndx Type: SHT_SYMTAB_SHNDX Size: 0x18 EntSize: 4 Link: .symtab ## Check that llvm-readobj reports an error if the e_phentsize field is broken. # RUN: not llvm-readobj --program-headers %p/Inputs/invalid-e_shnum.elf 2>&1 | \ # RUN: FileCheck --check-prefix=INVALID-PH-ENTSIZE %s # INVALID-PH-ENTSIZE: invalid e_phentsize ## Check that llvm-readobj reports an error when we have no SHT_SYMTAB_SHNDX section, ## but have a symbol referencing it. # RUN: not llvm-readobj --symbols %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \ # RUN: FileCheck --check-prefix=INVALID-EXT-SYMTAB-INDEX %s # INVALID-EXT-SYMTAB-INDEX: index past the end of the symbol table ## Check that llvm-readobj reports an error if a relocation section ## has a broken sh_offset (past the end of the file). # RUN: not llvm-readobj -r %p/Inputs/invalid-relocation-sec-sh_offset.elf-i386 2>&1 | \ # RUN: FileCheck --check-prefix=INVALID-RELOC-SH-OFFSET %s # RUN: not llvm-readobj -r %p/Inputs/invalid-relocation-sec-sh_offset.elf-x86-64 2>&1 | \ # RUN: FileCheck --check-prefix=INVALID-RELOC-SH-OFFSET %s # INVALID-RELOC-SH-OFFSET: invalid section offset ## Check that llvm-objdump reports an error when .shstrtab has a broken sh_offset ## so large that sh_offset + sh_size overflows the platform address size type. # RUN: not llvm-readobj --symbols %p/Inputs/invalid-section-size2.elf 2>&1 | \ # RUN: FileCheck --check-prefix=INVALID-SECTION-SIZE2 %s # INVALID-SECTION-SIZE2: invalid section offset ## Check that llvm-readobj reports an error when trying to dump sections ## when the e_shnum field is broken (is greater than the actual number of sections). # RUN: yaml2obj %s --docnum=12 -o %t12 # RUN: not llvm-readobj -S %t12 2>&1 | FileCheck --check-prefix=INVALID-SECTION-NUM %s # INVALID-SECTION-NUM: section table goes past the end of file --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 SHNum: 0xFF ## Check that llvm-readobj reports an error if a relocation contains an ## incorrect (too large) symbol index. # RUN: yaml2obj %s --docnum=13 -o %t13 # RUN: not llvm-readobj -r %t13 2>&1 | FileCheck --check-prefix=INVALID-REL-SYM %s # INVALID-REL-SYM: invalid section offset --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_REL Machine: EM_X86_64 Sections: - Name: .rela.text Type: SHT_RELA Info: 0 Relocations: - Offset: 0x0 Type: R_X86_64_64 Symbol: 0xFFFFFF ## Check llvm-readobj does not crash on a truncated ELF. ## Create a truncated ELF object with ELFCLASSNONE class using echo. ## 0x7f, 'E', 'L', 'F', ELFCLASS64(2), ELFDATA2LSB(1), ## EV_CURRENT(1), ELFOSABI_LINUX(3), , ET_REL(1), EM_NONE(0) # RUN: echo -e -n "\x7f\x45\x4c\x46\x02\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" > %t11 # RUN: not llvm-readobj -r %t11 2>&1 | FileCheck --check-prefix=INVALID-BUFFER %s # INVALID-BUFFER: Invalid buffer # RUN: not llvm-readobj %p/Inputs/invalid-coff-header-too-small 2>&1 | FileCheck --check-prefix=COFF-HEADER %s # COFF-HEADER: The file was not recognized as a valid object file