686 lines · plain
1## Check that llvm-objdump reports an error when2## .shstrtab has an invalid type.3 4# RUN: yaml2obj %s --docnum=1 -o %t15# RUN: not llvm-objdump -s %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=INVALID-SHTYPE6 7# INVALID-SHTYPE: error: '[[FILE]]': invalid sh_type for string table section [index 1]: expected SHT_STRTAB, but got SHT_PROGBITS8 9--- !ELF10FileHeader:11 Class: ELFCLASS6412 Data: ELFDATA2LSB13 Type: ET_DYN14 Machine: EM_X86_6415Sections:16 - Name: .shstrtab17 Type: SHT_PROGBITS18 19## Check that llvm-objdump reports an error when20## .shstrtab has an invalid zero-size.21 22# RUN: yaml2obj %s --docnum=2 -o %t223# RUN: not llvm-objdump -s %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=STRTAB-EMPTY24 25# STRTAB-EMPTY: error: '[[FILE]]': SHT_STRTAB string table section [index 1] is empty26 27--- !ELF28FileHeader:29 Class: ELFCLASS6430 Data: ELFDATA2LSB31 Type: ET_DYN32 Machine: EM_X86_6433Sections:34 - Name: .shstrtab35 Type: SHT_STRTAB36 Size: 037 38## Check that llvm-objdump reports an error when .shstrtab has an invalid39## size that goes past the end of the file.40 41# RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 \42# RUN: | FileCheck %s -DFILE=%p/Inputs/invalid-strtab-size.elf --check-prefix=INVALID-STRTAB-SIZE43 44# INVALID-STRTAB-SIZE: error: '[[FILE]]': section [index 1] has a sh_offset (0x70) + sh_size (0xffffff) that is greater than the file size (0x218)45 46## Document that llvm-dwarfdump doesn't reports errors/warnings during relocation resolution47## when instead of SHT_RELA section we have a SHT_REL section in an object.48## In this case it just doesn't try to read relocation addends and assumes they are 0.49 50## Note: we don't check the output, because the intention of this test is just to check the51## exit code and to document the fact that no warnings are reported.52# RUN: yaml2obj %s --docnum=3 -o %t353# RUN: llvm-dwarfdump -debug-line %t3 2>&1 | FileCheck --implicit-check-not=warning: %s54 55--- !ELF56FileHeader:57 Class: ELFCLASS6458 Data: ELFDATA2LSB59 Type: ET_REL60 Machine: EM_X86_6461Sections:62 - Name: .debug_line63 Type: SHT_PROGBITS64## The exact content does not matter here. We can use any minimal valid debug section65## which is a target for relocation. The idea is to trigger the code that reads the66## relocation's addend during relocation resolution. It should fail if called on67## a non-SHT_RELA section.68 Content: 380000000200210000000101FB0E0D00010101010000000100000100676C6F62616C2E6370700000000000000902000000000000000013023700010169 - Name: .rela.debug_line70 Type: SHT_REL71 Info: .debug_line72 Relocations:73 - Offset: 0x000000000000002E74 Type: R_X86_64_6475 76## Check that llvm-objdump reports an error when it tries to dump section names77## and .shstrtab is not null-terminated.78 79# RUN: yaml2obj %s --docnum=4 -o %t480# RUN: not llvm-objdump -s %t4 2>&1 | FileCheck -DFILE=%t4 --check-prefix=SHSTRTAB-NON-TERM %s81 82# SHSTRTAB-NON-TERM: error: '[[FILE]]': SHT_STRTAB string table section [index 1] is non-null terminated83 84--- !ELF85FileHeader:86 Class: ELFCLASS6487 Data: ELFDATA2LSB88 Type: ET_DYN89 Machine: EM_X86_6490Sections:91 - Name: .shstrtab92 Type: SHT_STRTAB93 Content: "11"94 95## Check that llvm-objdump reports an error when it tries to dump a symbol name and96## .strtab is not null-terminated.97 98# RUN: yaml2obj %s --docnum=5 -o %t599# RUN: not llvm-objdump --syms %t5 2>&1 | FileCheck --check-prefix=NONULL %s100 101# NONULL: error: {{.*}}: SHT_STRTAB string table section [index 1] is non-null terminated102 103--- !ELF104FileHeader:105 Class: ELFCLASS64106 Data: ELFDATA2LSB107 Type: ET_DYN108 Machine: EM_X86_64109Sections:110 - Name: .strtab111 Type: SHT_STRTAB112 Content: "11"113Symbols:114 - Name: foo115 116## Check that llvm-readobj reports an error if .symtab has an invalid sh_entsize.117 118# RUN: yaml2obj %s --docnum=6 -o %t6119# RUN: llvm-readobj --symbols %t6 2>&1 | FileCheck -DFILE=%t6 --check-prefix=INVALID-SYM-SIZE %s120 121# INVALID-SYM-SIZE: warning: '[[FILE]]': unable to read symbols from the SHT_SYMTAB section: section [index 1] has invalid sh_entsize: expected 24, but got 32122 123--- !ELF124FileHeader:125 Class: ELFCLASS64126 Data: ELFDATA2LSB127 Type: ET_DYN128 Machine: EM_X86_64129Sections:130 - Name: .symtab131 Type: SHT_SYMTAB132 EntSize: 32133Symbols:134 - Name: foo135 136## Check that llvm-readobj reports a warning if .dynsym has an invalid sh_entsize.137 138# RUN: yaml2obj %s --docnum=7 -o %t7139# RUN: llvm-readobj --dyn-symbols %t7 2>&1 | FileCheck -DFILE=%t7 --check-prefix=INVALID-DYNSYM-SIZE %s140 141# INVALID-DYNSYM-SIZE: warning: '[[FILE]]': SHT_DYNSYM section with index 1 has invalid size (0x30) or entry size (0x20)142 143--- !ELF144FileHeader:145 Class: ELFCLASS64146 Data: ELFDATA2LSB147 Type: ET_DYN148 Machine: EM_X86_64149Sections:150 - Name: .dynsym151 Type: SHT_DYNSYM152 EntSize: 32153DynamicSymbols:154 - Name: foo155 156## Check that llvm-readobj reports a warning if .symtab has an invalid sh_link value,157## which is greater than number of sections.158 159# RUN: yaml2obj %s --docnum=8 -o %t8160# RUN: llvm-readobj --symbols %t8 2>&1 | FileCheck -DFILE=%t8 --check-prefix=INVALID-SYMTAB-LINK %s161 162# INVALID-SYMTAB-LINK: warning: '[[FILE]]': unable to get the string table for the SHT_SYMTAB section: invalid section index: 255163 164--- !ELF165FileHeader:166 Class: ELFCLASS64167 Data: ELFDATA2LSB168 Type: ET_REL169 Machine: EM_X86_64170Sections:171 - Name: .symtab172 Type: SHT_SYMTAB173 Link: 0xFF174 175## Check that llvm-readobj reports an error when trying to dump sections176## when the e_shentsize field is broken.177 178# RUN: yaml2obj %s --docnum=9 -o %t9179# RUN: not llvm-readobj -S %t9 2>&1 | \180# RUN: FileCheck -DFILE=%t9 --implicit-check-not=warning: --check-prefix=INVALID-SH-ENTSIZE %s181 182# INVALID-SH-ENTSIZE: LoadName: <Not found>183# INVALID-SH-ENTSIZE-NEXT: error: '[[FILE]]': unable to continue dumping, the file is corrupt: invalid e_shentsize in ELF header: 1184 185--- !ELF186FileHeader:187 Class: ELFCLASS64188 Data: ELFDATA2LSB189 Type: ET_REL190 Machine: EM_X86_64191 EShEntSize: 1192 193## Check that llvm-readobj reports a warning if .symtab has sh_size194## that is not a multiple of sh_entsize.195 196# RUN: yaml2obj %s --docnum=10 -o %t10197# RUN: llvm-readobj --symbols %t10 2>&1 | FileCheck -DFILE=%t10 --check-prefix=INVALID-SYMTAB-SIZE %s198 199# INVALID-SYMTAB-SIZE: warning: '[[FILE]]': unable to read symbols from the SHT_SYMTAB section: section [index 1] has an invalid sh_size (1) which is not a multiple of its sh_entsize (24)200 201--- !ELF202FileHeader:203 Class: ELFCLASS64204 Data: ELFDATA2LSB205 Type: ET_DYN206 Machine: EM_X86_64207Sections:208 - Name: .symtab209 Type: SHT_SYMTAB210 Size: 1211 212## Test that llvm-readobj reports an error if SHT_SYMTAB_SHNDX section has213## invalid sh_size which should be:214## sizeof(.symtab_shndx) = (sizeof(.symtab) / entsize(.symtab)) * entsize(.symtab_shndx)215 216# RUN: yaml2obj %s --docnum=11 -o %t11217# RUN: llvm-readobj --symbols %t11 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s218 219# INVALID-XINDEX-SIZE: warning: {{.*}}: SHT_SYMTAB_SHNDX has 2 entries, but the symbol table associated has 1220 221--- !ELF222FileHeader:223 Class: ELFCLASS64224 Data: ELFDATA2LSB225 Type: ET_DYN226 Machine: EM_X86_64227Sections:228 - Name: .symtab_shndx229 Type: SHT_SYMTAB_SHNDX230 Entries: [ 0, 1 ]231 Link: .symtab232Symbols: []233 234## Check that llvm-readobj reports a warning when the e_phentsize field is broken.235 236# RUN: llvm-readobj --program-headers %p/Inputs/invalid-e_shnum.elf 2>&1 | \237# RUN: FileCheck -DFILE=%p/Inputs/invalid-e_shnum.elf --check-prefix=INVALID-PH-ENTSIZE %s238 239# INVALID-PH-ENTSIZE: warning: '[[FILE]]': unable to dump program headers: invalid e_phentsize: 12336240 241## Check that llvm-readobj reports a warning when we have no SHT_SYMTAB_SHNDX section,242## but have a symbol referencing it.243 244# RUN: llvm-readobj --symbols %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \245# RUN: FileCheck -DFILE=%p/Inputs/invalid-ext-symtab-index.elf-x86-64 --check-prefix=INVALID-EXT-SYMTAB-INDEX %s246 247# INVALID-EXT-SYMTAB-INDEX: warning: '[[FILE]]': found an extended symbol index (0), but unable to locate the extended symbol index table248# INVALID-EXT-SYMTAB-INDEX: Section: Reserved (0xFFFF)249 250## Check that llvm-readobj reports an error if a relocation section251## has a broken sh_offset (past the end of the file).252 253# RUN: yaml2obj %s --docnum=12 -o %t12254# RUN: yaml2obj %s --docnum=13 -o %t13255# RUN: llvm-readobj -r %t12 2>&1 | FileCheck -DFILE=%t12 --check-prefix=INVALID-RELOC-SH-OFFSET -DTYPE=SHT_REL %s256# RUN: llvm-readobj -r %t13 2>&1 | FileCheck -DFILE=%t13 --check-prefix=INVALID-RELOC-SH-OFFSET -DTYPE=SHT_RELA %s257 258# INVALID-RELOC-SH-OFFSET: warning: '[[FILE]]': unable to read relocations from [[TYPE]] section with index 1: section [index 1] has a sh_offset (0x10000) + sh_size (0x0) that is greater than the file size (0x160)259 260--- !ELF261FileHeader:262 Class: ELFCLASS64263 Data: ELFDATA2LSB264 Type: ET_REL265 Machine: EM_386266Sections:267 - Name: .rel268 Type: SHT_REL269 ShOffset: 0x10000270 271--- !ELF272FileHeader:273 Class: ELFCLASS64274 Data: ELFDATA2LSB275 Type: ET_REL276 Machine: EM_X86_64277Sections:278 - Name: .rela279 Type: SHT_RELA280 ShOffset: 0x10000281 282## Check that llvm-readobj reports a warning when we try to print section symbols and283## .shstrtab has a broken sh_offset so large that sh_offset + sh_size overflows the platform address size type.284 285# RUN: yaml2obj %s --docnum=14 -o %t14286# RUN: llvm-readobj --symbols %t14 2>&1 | FileCheck -DFILE=%t14 --check-prefix=INVALID-SECTION-SIZE2 %s287 288# INVALID-SECTION-SIZE2: Symbol {289# INVALID-SECTION-SIZE2: Name: symbol (1)290# INVALID-SECTION-SIZE2-NEXT: Value: 0x123291# INVALID-SECTION-SIZE2-NEXT: Size: 0292# INVALID-SECTION-SIZE2-NEXT: Binding: Local (0x0)293# INVALID-SECTION-SIZE2-NEXT: Type: None (0x0)294# INVALID-SECTION-SIZE2-NEXT: Other: 0295# INVALID-SECTION-SIZE2-NEXT: warning: '[[FILE]]': section [index 1] has a sh_offset (0xffffffff) + sh_size (0x1b) that cannot be represented296# INVALID-SECTION-SIZE2-NEXT: Section: <?> (0x1)297# INVALID-SECTION-SIZE2-NEXT: }298 299--- !ELF300FileHeader:301 Class: ELFCLASS32302 Data: ELFDATA2LSB303 Type: ET_REL304 Machine: EM_386305Sections:306 - Name: .shstrtab307 Type: SHT_STRTAB308 ShOffset: 0xFFFFFFFF309Symbols:310 - Name: symbol311 Section: .shstrtab312 Value: 0x123313 314## Check that llvm-readobj reports an error when trying to dump sections315## when the e_shnum field is broken (is greater than the actual number of sections).316 317# RUN: yaml2obj %s --docnum=15 -o %t15318# RUN: not llvm-readobj -S %t15 2>&1 | \319# RUN: FileCheck -DFILE=%t15 --implicit-check-not=warning: --check-prefix=INVALID-SECTION-NUM %s320 321# INVALID-SECTION-NUM: LoadName: <Not found>322# INVALID-SECTION-NUM-NEXT: error: '[[FILE]]': unable to continue dumping, the file is corrupt: section table goes past the end of file323 324--- !ELF325FileHeader:326 Class: ELFCLASS64327 Data: ELFDATA2LSB328 Type: ET_REL329 Machine: EM_X86_64330 EShNum: 0xFF331 332## Check llvm-readobj does not crash on a truncated ELF.333 334## Create a truncated ELF object with ELFCLASSNONE class using echo.335## 0x7f, 'E', 'L', 'F', ELFCLASS64(2), ELFDATA2LSB(1),336## EV_CURRENT(1), ELFOSABI_LINUX(3), <padding zero bytes>, ET_REL(1), EM_NONE(0)337# RUN: echo -e -n "\x7f\x45\x4c\x46\x02\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00" > %t11338# RUN: not llvm-readobj -r %t11 2>&1 | FileCheck --check-prefix=INVALID-BUFFER %s339 340# INVALID-BUFFER: error: {{.*}}': invalid buffer: the size (18) is smaller than an ELF header (64)341 342# RUN: not llvm-readobj %p/Inputs/invalid-coff-header-too-small 2>&1 | FileCheck --check-prefix=COFF-HEADER %s343# COFF-HEADER: The file was not recognized as a valid object file344 345## Check that llvm-readobj reports an error if section name offset346## overflows the section name string table.347 348# RUN: yaml2obj %s --docnum=16 -o %t16349# RUN: llvm-readobj --sections %t16 2>&1 | FileCheck -DFILE=%t16 --check-prefix=BROKEN-SECNAME %s350 351## BROKEN-SECNAME: warning: '[[FILE]]': unable to get the name of SHT_STRTAB section with index 2: a section [index 2] has an invalid sh_name (0xb) offset which goes past the end of the section name string table352 353--- !ELF354FileHeader:355 Class: ELFCLASS64356 Data: ELFDATA2LSB357 Type: ET_REL358 Machine: EM_X86_64359Sections:360 - Name: .shstrtab361 Type: SHT_STRTAB362 Size: 1363 364## Check that llvm-readobj reports an error if a section has a broken offset365## that goes past the end of the file.366 367# RUN: yaml2obj %s --docnum=17 -o %t17368# RUN: not llvm-readobj --sections --section-data %t17 2>&1 \369# RUN: | FileCheck -DFILE=%t17 --check-prefix=BROKEN-SECSHOFFSET %s370 371# BROKEN-SECSHOFFSET: error: '[[FILE]]': section [index 1] has a sh_offset (0xffff0000) + sh_size (0x0) that is greater than the file size (0x160)372 373--- !ELF374FileHeader:375 Class: ELFCLASS64376 Data: ELFDATA2LSB377 Type: ET_REL378 Machine: EM_X86_64379Sections:380 - Name: .foo381 Type: SHT_PROGBITS382 ShOffset: 0xFFFF0000383 384## Check that llvm-readobj reports a warning if symbol name385## offset goes past the end of the symbol string table.386 387# RUN: yaml2obj %s --docnum=18 -o %t18388# RUN: llvm-readobj --symbols %t18 2>&1 | FileCheck -DFILE=%t18 --check-prefix=INVALID-SYM-NAME %s389 390# INVALID-SYM-NAME: warning: '[[FILE]]': st_name (0x1) is past the end of the string table of size 0x1391 392--- !ELF393FileHeader:394 Class: ELFCLASS64395 Data: ELFDATA2LSB396 Type: ET_REL397 Machine: EM_X86_64398Sections:399 - Name: .strtab400 Type: SHT_STRTAB401 Size: 1402Symbols:403 - Name: foo404 405## Version index in .gnu.version overflows the version map.406## Check llvm-readobj reports it.407 408# RUN: yaml2obj %s --docnum=19 -o %t19409# RUN: llvm-readobj --dyn-symbols %t19 2>&1 | FileCheck -DFILE=%t19 --check-prefix=INVALID-VERSION %s410 411# INVALID-VERSION: warning: '[[FILE]]': SHT_GNU_versym section refers to a version index 255 which is missing412 413--- !ELF414FileHeader:415 Class: ELFCLASS64416 Data: ELFDATA2LSB417 Type: ET_DYN418 Machine: EM_X86_64419Sections:420 - Name: .gnu.version421 Type: SHT_GNU_versym422 Entries: [ 0xFF ]423DynamicSymbols:424 - Name: foo425 426## ELF header contains e_phentsize field with a value != sizeof(Elf_Phdr).427## Check llvm-readobj reports it.428 429# RUN: llvm-readobj -l %p/Inputs/corrupt-invalid-phentsize.elf.x86-64 2>&1 \430# RUN: | FileCheck -DFILE=%p/Inputs/corrupt-invalid-phentsize.elf.x86-64 --check-prefix=PHENTSIZE %s431 432# PHENTSIZE: warning: '[[FILE]]': unable to read program headers to locate the PT_DYNAMIC segment: invalid e_phentsize: 57433 434## The dynamic table contains DT_STRTAB with a value that is not in any loadable segment.435## Check llvm-readobj reports it.436 437# RUN: yaml2obj %s --docnum=20 -o %t20438# RUN: llvm-readobj --dynamic-table %t20 2>&1 | FileCheck -DFILE=%t20 --check-prefix=INVALID-DTSTRTAB %s439 440# INVALID-DTSTRTAB: warning: '[[FILE]]': unable to parse DT_STRTAB: virtual address is not in any segment: 0xffff0000441 442--- !ELF443FileHeader:444 Class: ELFCLASS64445 Data: ELFDATA2LSB446 Type: ET_EXEC447 Machine: EM_X86_64448Sections:449 - Name: .dynamic450 Type: SHT_DYNAMIC451 Address: 0x1000452 Entries:453 - Tag: DT_STRTAB454 Value: 0xFFFF0000455 - Tag: DT_NULL456 Value: 0x0457ProgramHeaders:458 - Type: PT_LOAD459 VAddr: 0x1000460 FirstSec: .dynamic461 LastSec: .dynamic462 463## Check that llvm-readobj reports a warning when a dynamic relocation section464## has sh_entsize field with size != sizeof(Elf_Rela).465 466# RUN: llvm-readobj --dyn-relocations \467# RUN: %p/Inputs/corrupt-invalid-relocation-size.elf.x86-64 2>&1 \468# RUN: | FileCheck -DFILE=%p/Inputs/corrupt-invalid-relocation-size.elf.x86-64 --check-prefix=RELOC-BROKEN-ENTSIZE %s469 470# RELOC-BROKEN-ENTSIZE: warning: '[[FILE]]': invalid DT_RELASZ value (0x18) or DT_RELAENT value (0x19)471 472## Check that llvm-readobj reports a warning when .dynamic section has an invalid473## size, which isn't a multiple of the dynamic entry size. 474 475# RUN: yaml2obj %s --docnum=21 -o %t21476# RUN: llvm-readobj --dyn-relocations %t21 2>&1 | FileCheck -DFILE=%t21 --check-prefix=DYN-TABLE-SIZE %s477 478# DYN-TABLE-SIZE: warning: '[[FILE]]': SHT_DYNAMIC section with index 1 has invalid size (0x1){{$}}479 480--- !ELF481FileHeader:482 Class: ELFCLASS64483 Data: ELFDATA2LSB484 Type: ET_EXEC485 Machine: EM_X86_64486Sections:487 - Name: .dynamic488 Type: SHT_DYNAMIC489 Content: "00"490 491## PT_DYNAMIC's p_offset field is so large that p_offset + p_filesz is larger492## than the object size. Check llvm-readobj reports it.493 494# RUN: yaml2obj %s --docnum=22 -o %t22495# RUN: llvm-readobj --dyn-relocations %t22 2>&1 | FileCheck -DFILE=%t22 --check-prefix=DYN-TABLE-PHDR %s496 497# DYN-TABLE-PHDR: warning: '[[FILE]]': PT_DYNAMIC segment offset (0xffff0000) + file size (0x0) exceeds the size of the file (0x150)498 499--- !ELF500FileHeader:501 Class: ELFCLASS64502 Data: ELFDATA2LSB503 Type: ET_EXEC504 Machine: EM_X86_64505ProgramHeaders:506 - Type: PT_DYNAMIC507 Offset: 0xffff0000508 509## PT_DYNAMIC's p_filesz field is so large that p_offset + p_filesz is larger510## than the object size. Check llvm-readobj reports it.511 512# RUN: yaml2obj %s --docnum=23 -o %t23513# RUN: llvm-readobj --dyn-relocations %t23 2>&1 \514# RUN: | FileCheck -DFILE=%t23 --check-prefix=DYN-TABLE-PHDR2 %s515 516# DYN-TABLE-PHDR2: warning: '[[FILE]]': PT_DYNAMIC segment offset (0x78) + file size (0xffff0000) exceeds the size of the file (0x1a8)517 518--- !ELF519FileHeader:520 Class: ELFCLASS64521 Data: ELFDATA2LSB522 Type: ET_EXEC523 Machine: EM_X86_64524Sections:525 - Name: .dynamic526 Type: SHT_DYNAMIC527 Entries:528 - Tag: DT_NULL529 Value: 0530ProgramHeaders:531 - Type: PT_DYNAMIC532 FileSize: 0xffff0000533 FirstSec: .dynamic534 LastSec: .dynamic535 536# RUN: yaml2obj --docnum=24 %s -o %t24537# RUN: not obj2yaml 2>&1 %t24 | FileCheck %s -DFILE=%t24 --check-prefix=INVALID-SHSTRNDX538 539# INVALID-SHSTRNDX: Error reading file: [[FILE]]: section header string table index 255 does not exist540 541--- !ELF542FileHeader:543 Class: ELFCLASS64544 Data: ELFDATA2LSB545 Type: ET_REL546 Machine: EM_X86_64547 EShStrNdx: 0xFF548Sections:549 - Name: .foo550 Type: SHT_PROGBITS551 552## We report an error if the number of sections stored in sh_size553## is greater than UINT64_MAX / sizeof(Elf_Shdr) == 288230376151711743.554## Here we check that do not crash on a border value.555 556# RUN: yaml2obj --docnum=25 %s -o %t25557# RUN: not llvm-readobj -h %t25 2>&1 | FileCheck -DFILE=%t25 --check-prefix=INVALID-SEC-NUM1 %s558 559# INVALID-SEC-NUM1: error: '[[FILE]]': unable to continue dumping, the file is corrupt: invalid section header table offset (e_shoff = 0x58) or invalid number of sections specified in the first section header's sh_size field (0x3ffffffffffffff)560 561--- !ELF562FileHeader:563 Class: ELFCLASS64564 Data: ELFDATA2LSB565 Type: ET_REL566 Machine: EM_X86_64567 EShNum: 0x0568Sections:569 - Type: SHT_NULL570 Size: 288230376151711743571 572## See above, but now we test the UINT64_MAX / sizeof(Elf_Shdr) value.573## The error is slightly different in this case.574 575# RUN: yaml2obj --docnum=26 %s -o %t26576# RUN: not llvm-readobj -h %t26 2>&1 | FileCheck -DFILE=%t26 --check-prefix=INVALID-SEC-NUM2 %s577 578# INVALID-SEC-NUM2: error: '[[FILE]]': unable to continue dumping, the file is corrupt: invalid number of sections specified in the NULL section's sh_size field (288230376151711744)579 580--- !ELF581FileHeader:582 Class: ELFCLASS64583 Data: ELFDATA2LSB584 Type: ET_REL585 Machine: EM_X86_64586 EShNum: 0x0587Sections:588 - Type: SHT_NULL589 Size: 288230376151711744590 591## Check the case when SHOff is too large. SHOff + sizeof(Elf_Shdr) overflows the uint64 type.592 593# RUN: yaml2obj --docnum=27 %s -o %t27594# RUN: not llvm-readobj -h %t27 2>&1 | FileCheck -DFILE=%t27 --check-prefix=INVALID-SEC-NUM3 %s595 596# INVALID-SEC-NUM3: error: '[[FILE]]': unable to continue dumping, the file is corrupt: section header table goes past the end of the file: e_shoff = 0xffffffffffffffff597 598--- !ELF599FileHeader:600 Class: ELFCLASS64601 Data: ELFDATA2LSB602 Type: ET_REL603 Machine: EM_X86_64604 EShOff: 0xffffffffffffffff605 606## Check that llvm-objdump reports an error when it tries to dump a607## symbol name and .strtab is empty.608 609# RUN: yaml2obj %s --docnum=28 -o %t28610# RUN: not llvm-objdump --syms %t28 2>&1 | FileCheck -DFILE=%t28 --check-prefix=STRTAB-EMPTY2 %s611 612# STRTAB-EMPTY2: error: '[[FILE]]': SHT_STRTAB string table section [index 1] is empty613 614--- !ELF615FileHeader:616 Class: ELFCLASS64617 Data: ELFDATA2LSB618 Type: ET_DYN619 Machine: EM_X86_64620Sections:621 - Name: .strtab622 Type: SHT_STRTAB623 Content: ""624Symbols:625 - Name: foo626 627## Check that we report a warning if SHT_GNU_versym has invalid628## sh_entsize value (3 instead of 2) when trying to access the entries.629 630# RUN: yaml2obj %s --docnum=29 -o %t29631# RUN: llvm-readobj -V %t29 2>&1 | FileCheck -DFILE=%t29 --check-prefix=INVALID-VER-SHENTSIZE %s632 633# INVALID-VER-SHENTSIZE: warning: '[[FILE]]': cannot read content of SHT_GNU_versym section with index 1: section [index 1] has invalid sh_entsize: expected 2, but got 3634 635--- !ELF636FileHeader:637 Class: ELFCLASS64638 Data: ELFDATA2LSB639 OSABI: ELFOSABI_FREEBSD640 Type: ET_DYN641 Machine: EM_X86_64642Sections:643 - Name: .gnu.version644 Type: SHT_GNU_versym645 EntSize: 0x0000000000000003646 Entries: [ ]647## Needed to trigger creation of .dynsym.648DynamicSymbols:649 - Name: foo650 Binding: STB_GLOBAL651 652## Check the case when e_shstrndx == SHN_XINDEX, but null section's sh_link contains653## the index of a section header string table that is larger than the number of the sections.654 655# RUN: yaml2obj --docnum=30 %s -o %t30656# RUN: not llvm-objcopy %t30 2>&1 | FileCheck %s -DFILE=%t30 --check-prefix=INVALID-SHSTRTAB-INDEX657 658# INVALID-SHSTRTAB-INDEX: error: section header string table index 255 does not exist659 660--- !ELF661FileHeader:662 Class: ELFCLASS64663 Data: ELFDATA2LSB664 Type: ET_REL665 Machine: EM_X86_64666## SHN_XINDEX == 0xffff.667 EShStrNdx: 0xffff668Sections:669 - Type: SHT_NULL670 Link: 0xff671 672## Check the case when the e_phoff field is invalid.673# RUN: yaml2obj --docnum=31 %s -o %t31674# RUN: llvm-objdump --private-headers %t31 2>&1 | FileCheck -DFILE=%t31 %s --check-prefix=INVALID-PHOFF675 676# INVALID-PHOFF: warning: '[[FILE]]': program headers are longer than binary of size 280: e_phoff = 0xffffff, e_phnum = 0, e_phentsize = 0677# INVALID-PHOFF-EMPTY:678 679--- !ELF680FileHeader:681 Class: ELFCLASS64682 Data: ELFDATA2LSB683 Type: ET_EXEC684 Machine: EM_X86_64685 EPhOff: 0xffffff686