From cfe9d0fb2bb91ae55136b28b3602e02ddc837d8c Mon Sep 17 00:00:00 2001 From: George Rimar Date: Thu, 27 Jun 2019 11:31:43 +0000 Subject: [PATCH] [Object/invalid.test] - Convert most of the sub tests to YAML. Object/invalid.test is a test case that is used to check the behavior of tools when broken inputs are used. The most often tool tested there is llvm-readobj. I think we might want to move such tests to test\tools\llvm-readobj. For now this patch converts many sub-tests to use YAML and removes 12 binaries from the inputs. Differential revision: https://reviews.llvm.org/D63762 llvm-svn: 364522 --- .../Object/Inputs/invalid-bad-rel-type.elf | Bin 845 -> 0 bytes llvm/test/Object/Inputs/invalid-buffer.elf | 1 - llvm/test/Object/Inputs/invalid-rel-sym.elf | Bin 496 -> 0 bytes .../Object/Inputs/invalid-section-index.elf | Bin 536 -> 0 bytes .../Object/Inputs/invalid-section-size.elf | Bin 584 -> 0 bytes .../Object/Inputs/invalid-sections-num.elf | Bin 528 -> 0 bytes .../test/Object/Inputs/invalid-sh_entsize.elf | Bin 1736 -> 0 bytes .../Object/Inputs/invalid-strtab-non-null.elf | Bin 536 -> 0 bytes .../Object/Inputs/invalid-strtab-type.elf | Bin 536 -> 0 bytes .../Inputs/invalid-strtab-zero-size.elf | Bin 494 -> 0 bytes .../Inputs/invalid-symbol-table-size.elf | Bin 536 -> 0 bytes .../Object/Inputs/invalid-xindex-size.elf | Bin 624 -> 0 bytes llvm/test/Object/invalid.test | 352 ++++++++++++++---- 13 files changed, 288 insertions(+), 65 deletions(-) delete mode 100644 llvm/test/Object/Inputs/invalid-bad-rel-type.elf delete mode 100644 llvm/test/Object/Inputs/invalid-buffer.elf delete mode 100644 llvm/test/Object/Inputs/invalid-rel-sym.elf delete mode 100644 llvm/test/Object/Inputs/invalid-section-index.elf delete mode 100644 llvm/test/Object/Inputs/invalid-section-size.elf delete mode 100644 llvm/test/Object/Inputs/invalid-sections-num.elf delete mode 100755 llvm/test/Object/Inputs/invalid-sh_entsize.elf delete mode 100644 llvm/test/Object/Inputs/invalid-strtab-non-null.elf delete mode 100644 llvm/test/Object/Inputs/invalid-strtab-type.elf delete mode 100644 llvm/test/Object/Inputs/invalid-strtab-zero-size.elf delete mode 100755 llvm/test/Object/Inputs/invalid-symbol-table-size.elf delete mode 100644 llvm/test/Object/Inputs/invalid-xindex-size.elf diff --git a/llvm/test/Object/Inputs/invalid-bad-rel-type.elf b/llvm/test/Object/Inputs/invalid-bad-rel-type.elf deleted file mode 100644 index 2caebcdd1e59079ca7cc9013ddf7d982c534f609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmbVJ%?`mp5S}eT6NI?9I5@d2Hx7skC+{FzZIIMYbS0d4G>_nYT+GyL)2vEFlihFT z`{v8+Os~`V%n>37{0SI?Fi8q0AMpfSD5co{Lh41QVA*euMR1z8=sxD;PX=K9SAP-f zX^MaSb@XQK%k&@edkomMWfWW^rtr@5*O;UI(ClX8hVLSmwWAEKK9YlNf zSYpzCubsEP_-pJRaUTP=e}IAmZM=neRx5Z5D#0UQ74AJ1%H`qkcDu;{4X2Nl#LBmn z`43o1AQx{iNwWi~gR=(dMG?qj5Gv^h-f6W6H@g62w2t&qD-R=smu;N;N-KB){lg++ diff --git a/llvm/test/Object/Inputs/invalid-buffer.elf b/llvm/test/Object/Inputs/invalid-buffer.elf deleted file mode 100644 index 665d9d1a5cb1..000000000000 --- a/llvm/test/Object/Inputs/invalid-buffer.elf +++ /dev/null @@ -1 +0,0 @@ -ELF \ No newline at end of file diff --git a/llvm/test/Object/Inputs/invalid-rel-sym.elf b/llvm/test/Object/Inputs/invalid-rel-sym.elf deleted file mode 100644 index d00ddd5e7477fa67a9e6e7b88ce0617110f11429..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmb<-^>JfjWMqH=Mg}_u1P><4z_0|NjwU zdPS)@iFzfe6(tO5`S}cb#U({0iAg}ZG8aTs3P5gQ#$w0>sF(tp9C}!=0p&qrAQ~As yKsg-9fJfjWMpQ50!9Wq21XbMiJpPPb^x;-7}&6?geX)1QUVN25Dqe_SCU#$!l0K_ zT+EMEWh)_xftcui2Ju0d4J3&K9FW+^ zOcrDgkSznmApPiWZ~%&71L*qMfr>bQm|XoLK)qN(pTPkr4gv-cih&JfjWMpQ50!9Wq21XbMiJpPPb^xl&yp$24Z6KJ4_rT#|Gjc0S6>D zGLr?FgT$5rvO(scyU77b4Kfp#IqX1196(H|IU+zau*4FB15g|U3?LNP%^-J!>;wS` H2n8nrDWebc diff --git a/llvm/test/Object/Inputs/invalid-sections-num.elf b/llvm/test/Object/Inputs/invalid-sections-num.elf deleted file mode 100644 index d8d5bc8fe2baa23001cf28023384dd2843fa464c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmb<-^>JfjWMpQ50!9Wq21XbMiJpPPb^x;>B$6-+lLyE%U|>QK19S9BQY%Ur^pc8; z8Pf9e8T5)vib@ibfOKUpm`+J7NyOBJOGE*egaA+i?kTXM`(UyFszD7(!zgq=gZLoK z22%i~9nknNE(?sozz1e207;O3R5vg%H~_`)0d}Ay2M{CcQv~uIfEXJ<*b9-B08;Q! WZ$Rj9fHDoBG|Yb>yFdV>4+H=$1`_W8 diff --git a/llvm/test/Object/Inputs/invalid-sh_entsize.elf b/llvm/test/Object/Inputs/invalid-sh_entsize.elf deleted file mode 100755 index ed501311b29bfd8b09fd92f6330eee8fbd7da939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1736 zcmcIk%SvNG5Us?=_*%qKL{Kmb7lPOj+&CMFj~Nlvl`aG!+<1c#%njsT#jN~=Eax*^ z`U!qUeqp{~taG~#3D-nXu^>6!r}}hNcU9kq-$#G)xt!2OWLtVOvLeqTy>VH#WK_yB zBhxaj^r-&I=FVc*c;bZ35o658gP?0k5T)Q(fksU7-C55QAN^E_)a5^@W1hC%D?lCv zJvsB>0$fu;{{8R#B;#>v2){6dmq04DFh~?C)i|!iNzh7^ibB61;^6*pF5G`#d35HD zcZFHe?sM9Fi-xShU-KhR*pi2IZw#NzZ}hhT&N8V#;K9k6Ts3dPV#$?C??gm;x%`-9 z`@rA(>pIQo`ayM?8^W&);ia;FezJ3Xxc64UTvEGF#AzMHh3zO#TH>N+Qgc_)t-}d7 z?rN?0x*2(QyCJR~#PxI*G_Ehj#dQ@WK~+b@b|amqJ)+5d(biRu-atRW*e}F;Pp5v| zHQz_kc-$v?kb3qLk^N-LCEHG$>R>-(4f~C_W#vA!1FUNciJtBKQ%B~P z4xr^bVjoe@?+MSx`1VXB^r1r|KV+ r>Z6ez)8jpX;`xilA1N|-qf#gvx!OJfjWMpQ50!9Wq21XbMiJpPPb^x;-7}&6?geX)1Q%n#JGO1URT2aEFmsDKL zpjTW{RFaqkq$_j5bV_1LVj{9)^4UBT_(6}kX;}k0ihTG D&2bPu diff --git a/llvm/test/Object/Inputs/invalid-strtab-type.elf b/llvm/test/Object/Inputs/invalid-strtab-type.elf deleted file mode 100644 index 2a072ebe51d4714f88188da5f0cf598b21cb09ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmb<-^>JfjWMpQ50!9Wq21XbMiJpPPb^x;-7}&6?geX)1Q%n#JGO1URT2aEFmsDKL zpjTW{RFaqkq$_j5bV_1LBC=Wv*gQbJ*!)odHB$-AY;?6CJ_xg+sdGT%!?-Lk29%Zo z(jfitfQ5=XKxuReT|YZe0S6G1t6v1D7fa|fH~_^#zyLyl-3U?#vI_(xAQS@tHqsB< diff --git a/llvm/test/Object/Inputs/invalid-strtab-zero-size.elf b/llvm/test/Object/Inputs/invalid-strtab-zero-size.elf deleted file mode 100644 index cb0d0d0d0f9204607051bd2eee7088057d5751d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmb<-^>JfjWMp8_X8;3c20I2t2or@|fW&hEvmF>%8G!l-0CuoEGgK9ldcBg=iV}vj z{Cozz)QtGFqQu-(2EF2vqLRcUZTx_Mji}P1KrYPo6d=1EDqVr949tVNjs+sc4fY*K zj15h#0~((LZUd74z-pjI!PRpESwJ-fOmGnh!vV@iR}VK2>TFq{IJfjWMpQ50!9Wq21XbMiJpPPb^x;-7}&6?gec?zQ%n#JGO1URT2aEFmsDKL zkj9`_TvAk$m;|INbHQ{jUK%H<;A(>JDWvd{Gftcui2Ju0d4J3&K9FW+^ zOcrDgkSzzqApPiWZ~%&71L*qMfr>bQm|Xp0K)qN(pTPkr4g!V{3hYLZI*?r;AOWEm E0J6#uH~;_u diff --git a/llvm/test/Object/Inputs/invalid-xindex-size.elf b/llvm/test/Object/Inputs/invalid-xindex-size.elf deleted file mode 100644 index 2852b85ca04252818dc7b15cab7a5087cc33d698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmb<-^>JfjWMpQ50!9Wq21XbMiQa(3b^x;-7}((||Nlpl1~a9>B&Ik>ma`mz2NXi ov&;d?H-OS0H-glG>;eG^2*tnyq=letWU2tlfw`9zjSmwC0M*qS*Z=?k diff --git a/llvm/test/Object/invalid.test b/llvm/test/Object/invalid.test index 921a5d6a7bc0..112364a4056f 100644 --- a/llvm/test/Object/invalid.test +++ b/llvm/test/Object/invalid.test @@ -1,84 +1,308 @@ -RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-type.elf 2>&1 | FileCheck %s -RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 | FileCheck %s -RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-zero-size.elf 2>&1 | FileCheck %s -CHECK: Invalid data was encountered while parsing the file +## Check that llvm-objdump reports an error when +## .shstrtab has an invalid type. -RUN: not llvm-dwarfdump -debug-line %p/Inputs/invalid-bad-rel-type.elf 2>&1 | FileCheck --check-prefix=RELA %s -RELA: Section is not SHT_RELA +# RUN: yaml2obj %s --docnum=1 -o %t1 +# RUN: not llvm-objdump -s %t1 2>&1 | FileCheck %s --check-prefix=INVALIDERR -RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-non-null.elf 2>&1 | FileCheck --check-prefix=NON-NULL %s -NON-NULL: Invalid data was encountered while parsing the file +# INVALIDERR: Invalid data was encountered while parsing the file -Test the sh_entsize are invalid -RUN: llvm-readobj -S %p/Inputs/invalid-sh_entsize.elf | FileCheck --check-prefix=SECTION %s +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .shstrtab + Type: SHT_PROGBITS -SECTION: Name: .dynsym -SECTION-NEXT: Type: SHT_DYNSYM -SECTION-NEXT: Flags [ -SECTION-NEXT: SHF_ALLOC -SECTION-NEXT: ] -SECTION-NEXT: Address: -SECTION-NEXT: Offset: -SECTION-NEXT: Size: -SECTION-NEXT: Link: -SECTION-NEXT: Info: -SECTION-NEXT: AddressAlignment: -SECTION-NEXT: EntrySize: 32 +## Check that llvm-objdump reports an error when +## .shstrtab has an invalid zero-size. -SECTION: Name: .symtab -SECTION-NEXT: Type: SHT_SYMTAB -SECTION-NEXT: Flags [ -SECTION-NEXT: ] -SECTION-NEXT: Address: -SECTION-NEXT: Offset: -SECTION-NEXT: Size: -SECTION-NEXT: Link: -SECTION-NEXT: Info: -SECTION-NEXT: AddressAlignment: -SECTION-NEXT: EntrySize: 32 +# RUN: yaml2obj %s --docnum=2 -o %t2 +# RUN: not llvm-objdump -s %t2 2>&1 | FileCheck %s --check-prefix=INVALIDERR -RUN: not llvm-readobj --symbols %p/Inputs/invalid-sh_entsize.elf 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: .shstrtab + Type: SHT_STRTAB + Size: 0 -RUN: not llvm-readobj --symbols %p/Inputs/invalid-section-index.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-INDEX %s -INVALID-SECTION-INDEX: invalid section index +## Check that llvm-objdump reports an error when .shstrtab has an invalid +## size that goes past the end of the file. -RUN: not llvm-readobj -S %p/Inputs/invalid-section-size.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-SIZE %s -INVALID-SECTION-SIZE: invalid section header entry size (e_shentsize) in ELF header +# 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: not llvm-readobj --symbols %p/Inputs/invalid-symbol-table-size.elf 2>&1 | FileCheck --check-prefix=INVALID-SYMTAB-SIZE %s -INVALID-SYMTAB-SIZE: size is not a multiple of sh_entsize +# 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 -RUN: not llvm-readobj --symbols %p/Inputs/invalid-xindex-size.elf 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s -INVALID-XINDEX-SIZE: invalid section contents size +--- !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 -RUN: not llvm-readobj --symbols %p/Inputs/invalid-e_shnum.elf 2>&1 | FileCheck --check-prefix=INVALID-SH-NUM %s -INVALID-SH-NUM: invalid e_phentsize +## Check that llvm-objdump reports an error when it tries to dump section names +## and .shstrtab is not null-terminated. -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 +# RUN: yaml2obj %s --docnum=4 -o %t4 +# RUN: not llvm-objdump -s %t4 2>&1 | FileCheck --check-prefix=INVALIDERR %s -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 +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .shstrtab + Type: SHT_STRTAB + Content: "11" -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-objdump reports an error when it tries to dump a symbol name and +## .strtab is not null-terminated. -RUN: not llvm-readobj --symbols %p/Inputs/invalid-sections-num.elf 2>&1 | FileCheck --check-prefix=INVALID-SECTION-NUM %s -INVALID-SECTION-NUM: section table goes past the end of file +# RUN: yaml2obj %s --docnum=5 -o %t5 +# RUN: not llvm-objdump -syms %t5 2>&1 | FileCheck --check-prefix=NONULL %s -RUN: not llvm-readobj -r %p/Inputs/invalid-rel-sym.elf 2>&1 | FileCheck --check-prefix=INVALID-REL-SYM %s -INVALID-REL-SYM: invalid section offset +# NONULL: string table non-null terminated -RUN: not llvm-readobj -r %p/Inputs/invalid-buffer.elf 2>&1 | FileCheck --check-prefix=INVALID-BUFFER %s -INVALID-BUFFER: Invalid buffer +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .strtab + Type: SHT_STRTAB + Content: "11" +Symbols: + - Name: foo -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 +## 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