diff options
Diffstat (limited to 'llvm/test/tools/llvm-readobj')
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/verdef-invalid.test | 15 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/verneed-invalid.test | 27 | ||||
-rw-r--r-- | llvm/test/tools/llvm-readobj/ELF/versym-invalid.test | 44 |
3 files changed, 73 insertions, 13 deletions
diff --git a/llvm/test/tools/llvm-readobj/ELF/verdef-invalid.test b/llvm/test/tools/llvm-readobj/ELF/verdef-invalid.test index f80e9383f70..e22ed6ee7ec 100644 --- a/llvm/test/tools/llvm-readobj/ELF/verdef-invalid.test +++ b/llvm/test/tools/llvm-readobj/ELF/verdef-invalid.test @@ -263,11 +263,12 @@ Sections: DynamicSymbols: - Name: foo -## Check we error out when trying to print version symbols, but SHT_GNU_verdef is invalid due to any reason. +## Check we report a warning when trying to print version symbols, but SHT_GNU_verdef +## is invalid due to any reason. # RUN: yaml2obj %s --docnum=10 -o %t10 -# RUN: not llvm-readobj -V %t10 2>&1 | FileCheck %s --check-prefix=INVALID-VERDEF-LLVM -DFILE=%t10 -# RUN: not llvm-readelf -V %t10 2>&1 | FileCheck %s --check-prefix=INVALID-VERDEF-GNU -DFILE=%t10 +# RUN: llvm-readobj -V %t10 2>&1 | FileCheck %s --check-prefix=INVALID-VERDEF-LLVM -DFILE=%t10 +# RUN: llvm-readelf -V %t10 2>&1 | FileCheck %s --check-prefix=INVALID-VERDEF-GNU -DFILE=%t10 # INVALID-VERDEF-LLVM: VersionSymbols [ # INVALID-VERDEF-LLVM-NEXT: Symbol { @@ -277,12 +278,14 @@ DynamicSymbols: # INVALID-VERDEF-LLVM-NEXT: Symbol { # INVALID-VERDEF-LLVM-NEXT: Version: 2 # INVALID-VERDEF-LLVM-EMPTY: -# INVALID-VERDEF-LLVM-NEXT: error: '[[FILE]]': invalid SHT_GNU_verdef section with index 2: version definition 1 goes past the end of the section +# INVALID-VERDEF-LLVM-NEXT: warning: '[[FILE]]': invalid SHT_GNU_verdef section with index 2: version definition 1 goes past the end of the section +# INVALID-VERDEF-LLVM-NEXT: Name: foo@<corrupt> # INVALID-VERDEF-GNU: Version symbols section '.gnu.version' contains 2 entries: # INVALID-VERDEF-GNU-NEXT: Addr: 0000000000000000 Offset: 0x000040 Link: 5 (.dynsym) -# INVALID-VERDEF-GNU-NEXT: 000: 0 (*local*) -# INVALID-VERDEF-GNU-NEXT: error: '[[FILE]]': invalid SHT_GNU_verdef section with index 2: version definition 1 goes past the end of the section +# INVALID-VERDEF-GNU-EMPTY: +# INVALID-VERDEF-GNU-NEXT: warning: '[[FILE]]': unable to get a version for entry 1 of SHT_GNU_versym section with index 1: invalid SHT_GNU_verdef section with index 2: version definition 1 goes past the end of the section +# INVALID-VERDEF-GNU-NEXT: 000: 0 (*local*) 2 (<corrupt>) --- !ELF FileHeader: diff --git a/llvm/test/tools/llvm-readobj/ELF/verneed-invalid.test b/llvm/test/tools/llvm-readobj/ELF/verneed-invalid.test index e8d75afe1e6..66c2d833a3a 100644 --- a/llvm/test/tools/llvm-readobj/ELF/verneed-invalid.test +++ b/llvm/test/tools/llvm-readobj/ELF/verneed-invalid.test @@ -10,7 +10,7 @@ # GNU-VERNEED-NAME: Version symbols section '.gnu.version' contains 2 entries: # GNU-VERNEED-NAME-NEXT: Addr: 0000000000200210 Offset: 0x000040 Link: 5 (.dynsym) -# GNU-VERNEED-NAME-NEXT: 000: 0 (*local*) 2 (*invalid*) +# GNU-VERNEED-NAME-NEXT: 000: 0 (*local*) 2 (<corrupt>) # GNU-VERNEED-NAME: Version needs section '.gnu.version_r' contains 1 entries: # GNU-VERNEED-NAME-NEXT: Addr: 0000000000000000 Offset: 0x000044 Link: 6 (.dynstr) @@ -86,9 +86,9 @@ DynamicSymbols: # GNU-NOLINK: Version symbols section '.gnu.version' contains 2 entries: # GNU-NOLINK-NEXT: Addr: 0000000000000000 Offset: 0x000040 Link: 5 (.dynsym) -# GNU-NOLINK-NEXT: 000: 0 (*local*) +# GNU-NOLINK-EMPTY: # GNU-NOLINK-NEXT: warning: '[[FILE]]': invalid string table linked to SHT_GNU_verneed section with index 2: invalid sh_type for string table section [index 0]: expected SHT_STRTAB, but got SHT_NULL -# GNU-NOLINK-NEXT: 2 (<corrupt>) +# GNU-NOLINK-NEXT: 000: 0 (*local*) 2 (<corrupt>) # GNU-NOLINK-EMPTY: # GNU-NOLINK: Version needs section '.gnu.version_r' contains 1 entries: # GNU-NOLINK-NEXT: Addr: 0000000000000000 Offset: 0x000044 Link: 0 () @@ -158,10 +158,23 @@ DynamicSymbols: ## We can't parse misaligned auxiliary version records. # RUN: yaml2obj --docnum=3 %s -o %t3 -# RUN: not llvm-readelf -V %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=BROKEN-AUX -# RUN: not llvm-readobj -V %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=BROKEN-AUX - -# BROKEN-AUX: error: '[[FILE]]': invalid SHT_GNU_verneed section with index 2: found a misaligned auxiliary entry at offset 0x11 +# RUN: llvm-readelf -V %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=BROKEN-AUX-GNU +# RUN: llvm-readobj -V %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=BROKEN-AUX-LLVM + +# BROKEN-AUX-GNU: Version symbols section '.gnu.version' contains 1 entries: +# BROKEN-AUX-GNU-NEXT: Addr: 0000000000000000 Offset: 0x000040 Link: 5 (.dynsym) +# BROKEN-AUX-GNU-EMPTY: +# BROKEN-AUX-GNU-NEXT: warning: '[[FILE]]': unable to get a version for entry 0 of SHT_GNU_versym section with index 1: invalid SHT_GNU_verneed section with index 2: found a misaligned auxiliary entry at offset 0x11 +# BROKEN-AUX-GNU-NEXT: 000: 2 (<corrupt>) + +# BROKEN-AUX-LLVM: VersionSymbols [ +# BROKEN-AUX-LLVM-NEXT: Symbol { +# BROKEN-AUX-LLVM-NEXT: Version: 2 +# BROKEN-AUX-LLVM-EMPTY: +# BROKEN-AUX-LLVM-NEXT: warning: '[[FILE]]': invalid SHT_GNU_verneed section with index 2: found a misaligned auxiliary entry at offset 0x11 +# BROKEN-AUX-LLVM-NEXT: Name: @<corrupt> +# BROKEN-AUX-LLVM-NEXT: } +# BROKEN-AUX-LLVM-NEXT: ] --- !ELF FileHeader: diff --git a/llvm/test/tools/llvm-readobj/ELF/versym-invalid.test b/llvm/test/tools/llvm-readobj/ELF/versym-invalid.test index a88318e5f49..96c33dee1a3 100644 --- a/llvm/test/tools/llvm-readobj/ELF/versym-invalid.test +++ b/llvm/test/tools/llvm-readobj/ELF/versym-invalid.test @@ -218,3 +218,47 @@ Sections: DynamicSymbols: - Name: foo - Name: bar + +## Version index in a SHT_GNU_versym section overflows the version map. +## Check we report it when trying to dump dynamic symbols. + +# RUN: yaml2obj %s --docnum=8 -o %t8 +# RUN: llvm-readobj --dyn-syms %t8 2>&1 \ +# RUN: | FileCheck -DFILE=%t8 --implicit-check-not=warning --check-prefix=VERSION-OVERFLOW-LLVM %s +# RUN: llvm-readelf --dyn-syms %t8 2>&1 \ +# RUN: | FileCheck -DFILE=%t8 --implicit-check-not=warning --check-prefix=VERSION-OVERFLOW-GNU %s + +# VERSION-OVERFLOW-LLVM: DynamicSymbols [ +# VERSION-OVERFLOW-LLVM-EMPTY: +# VERSION-OVERFLOW-LLVM-NEXT: warning: '[[FILE]]': SHT_GNU_versym section refers to a version index 255 which is missing +# VERSION-OVERFLOW-LLVM-NEXT: Symbol { +# VERSION-OVERFLOW-LLVM-NEXT: Name: @<corrupt> (0) +# VERSION-OVERFLOW-LLVM: warning: '[[FILE]]': SHT_GNU_versym section refers to a version index 254 which is missing +# VERSION-OVERFLOW-LLVM-NEXT: Symbol { +# VERSION-OVERFLOW-LLVM-NEXT: Name: foo@<corrupt> (5) +# VERSION-OVERFLOW-LLVM: Symbol { +# VERSION-OVERFLOW-LLVM-NEXT: Name: bar@<corrupt> (1) + +# VERSION-OVERFLOW-GNU: Symbol table '.dynsym' contains 3 entries: +# VERSION-OVERFLOW-GNU-NEXT: Num: Value Size Type Bind Vis Ndx Name +# VERSION-OVERFLOW-GNU-EMPTY: +# VERSION-OVERFLOW-GNU-NEXT: warning: '[[FILE]]': SHT_GNU_versym section refers to a version index 255 which is missing +# VERSION-OVERFLOW-GNU-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND @<corrupt> +# VERSION-OVERFLOW-GNU-EMPTY: +# VERSION-OVERFLOW-GNU-NEXT: warning: '[[FILE]]': SHT_GNU_versym section refers to a version index 254 which is missing +# VERSION-OVERFLOW-GNU-NEXT: 1: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND foo@<corrupt> +# VERSION-OVERFLOW-GNU-NEXT: 2: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND bar@<corrupt + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_DYN + Machine: EM_X86_64 +Sections: + - Name: .gnu.version + Type: SHT_GNU_versym + Entries: [ 0xFF, 0xFE, 0xFF ] +DynamicSymbols: + - Name: foo + - Name: bar |