summaryrefslogtreecommitdiffstats
path: root/llvm/test/tools/llvm-readobj/elf-verneed-invalid.test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/tools/llvm-readobj/elf-verneed-invalid.test')
-rw-r--r--llvm/test/tools/llvm-readobj/elf-verneed-invalid.test98
1 files changed, 76 insertions, 22 deletions
diff --git a/llvm/test/tools/llvm-readobj/elf-verneed-invalid.test b/llvm/test/tools/llvm-readobj/elf-verneed-invalid.test
index 88039f89c59..81976539bbc 100644
--- a/llvm/test/tools/llvm-readobj/elf-verneed-invalid.test
+++ b/llvm/test/tools/llvm-readobj/elf-verneed-invalid.test
@@ -86,11 +86,12 @@ 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*) 2 (bar)
+# GNU-NOLINK-NEXT: 000: 0 (*local*)
+# 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-EMPTY:
# GNU-NOLINK: Version needs section '.gnu.version_r' contains 1 entries:
# GNU-NOLINK-NEXT: Addr: 0000000000000000 Offset: 0x000044 Link: 0 ()
-# 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: 0x0000: Version: 1 File: <corrupt vn_file: 9> Cnt: 1
# GNU-NOLINK-NEXT: 0x0010: Name: <corrupt> Flags: none Version: 2
@@ -100,14 +101,14 @@ DynamicSymbols:
# LLVM-NOLINK-NEXT: Name:
# LLVM-NOLINK-NEXT: }
# LLVM-NOLINK-NEXT: Symbol {
+# LLVM-NOLINK-EMPTY:
+# LLVM-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
# LLVM-NOLINK-NEXT: Version: 2
-# LLVM-NOLINK-NEXT: Name: foo@bar
+# LLVM-NOLINK-NEXT: Name: foo@<corrupt>
# LLVM-NOLINK-NEXT: }
# LLVM-NOLINK-NEXT: ]
# LLVM-NOLINK: VersionRequirements [
-# LLVM-NOLINK-EMPTY:
-# LLVM-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
# LLVM-NOLINK-NEXT: Dependency {
# LLVM-NOLINK-NEXT: Version: 1
# LLVM-NOLINK-NEXT: Count: 1
@@ -155,14 +156,12 @@ DynamicSymbols:
Binding: STB_GLOBAL
## We can't parse misaligned auxiliary version records.
-## Here we have a SHT_GNU_verneed section aligned by 1 byte.
-## This makes the first auxiliary record offset % 4 be non-zero.
# 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]]': SHT_GNU_verneed: the vn_aux field of the entry with index 0 references a misaligned auxiliary record
+# BROKEN-AUX: error: '[[FILE]]': invalid SHT_GNU_verneed section with index 2: found a misaligned auxiliary entry at offset 0x11
--- !ELF
FileHeader:
@@ -176,19 +175,14 @@ Sections:
Flags: [ SHF_ALLOC ]
Link: .dynsym
Entries: [ 2 ]
- - Name: .gnu.version_r
- Type: SHT_GNU_verneed
- Flags: [ SHF_ALLOC ]
- Info: 1
- AddressAlign: 1
- Dependencies:
- - Version: 1
- File: somefile
- Entries:
- - Name: 'bar'
- Hash: 0
- Flags: 0
- Other: 2
+ - Name: .gnu.version_r
+ Type: SHT_GNU_verneed
+ Flags: [ SHF_ALLOC ]
+ Info: 1
+ Link: .dynstr
+ AddressAlign: 4
+## The byte offset to the auxiliary entry is 0x11, i.e. it is not correctly aligned in memory.
+ Content: "0100010001000000110000000000000000000000"
DynamicSymbols:
- Name: foo
@@ -551,3 +545,63 @@ Sections:
Other: 0
DynamicSymbols:
- Name: foo
+
+## In this case SHT_GNU_verneed is linked to a custom dynamic string table, which is not
+## called ".dynstr". Check we handle this case properly.
+
+# RUN: yaml2obj --docnum=13 %s -o %t13
+# RUN: llvm-readelf -V %t13 2>&1 | FileCheck %s -DFILE=%t13 --check-prefix=GNU-CUSTOM-DYNSTR
+# RUN: llvm-readobj -V %t13 2>&1 | FileCheck %s -DFILE=%t13 --check-prefix=LLVM-CUSTOM-DYNSTR
+
+# GNU-CUSTOM-DYNSTR: Version symbols section '.gnu.version' contains 2 entries:
+# GNU-CUSTOM-DYNSTR-NEXT: Addr: 0000000000000000 Offset: 0x000040 Link: 6 (.dynsym)
+# GNU-CUSTOM-DYNSTR-NEXT: 000: 0 (*local*) 2 (bcdefghij)
+# GNU-CUSTOM-DYNSTR: Version needs section '.gnu.version_r' contains 1 entries:
+# GNU-CUSTOM-DYNSTR-NEXT: Addr: 0000000000000000 Offset: 0x000044 Link: 3 (.custom.dynstr)
+# GNU-CUSTOM-DYNSTR-NEXT: 0x0000: Version: 1 File: j Cnt: 1
+# GNU-CUSTOM-DYNSTR-NEXT: 0x0010: Name: bcdefghij Flags: none Version: 2
+
+# LLVM-CUSTOM-DYNSTR: VersionSymbols [
+# LLVM-CUSTOM-DYNSTR: Symbol {
+# LLVM-CUSTOM-DYNSTR: Version: 2
+# LLVM-CUSTOM-DYNSTR-NEXT: Name: foo@bcdefghij
+
+# LLVM-CUSTOM-DYNSTR: VersionRequirements [
+# LLVM-CUSTOM-DYNSTR: Dependency {
+# LLVM-CUSTOM-DYNSTR: Entries [
+# LLVM-CUSTOM-DYNSTR: Entry {
+# LLVM-CUSTOM-DYNSTR: Index: 2
+# LLVM-CUSTOM-DYNSTR-NEXT: Name: bcdefghij
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_EXEC
+ Machine: EM_X86_64
+Sections:
+ - Name: .gnu.version
+ Type: SHT_GNU_versym
+ Flags: [ SHF_ALLOC ]
+ Link: .dynsym
+ Entries: [ 0, 2 ]
+ - Name: .gnu.version_r
+ Type: SHT_GNU_verneed
+ Flags: [ SHF_ALLOC ]
+ Link: .custom.dynstr
+ Info: 1
+ AddressAlign: 4
+ Dependencies:
+ - Version: 1
+ File: zed
+ Entries:
+ - Name: 'bar'
+ Hash: 0
+ Flags: 0
+ Other: 2
+ - Name: .custom.dynstr
+ Type: SHT_STRTAB
+ Content: "6162636465666768696a00" ## 'a','b','c','d','e','f','g','h','i','j',NIL
+DynamicSymbols:
+ - Name: foo
+ Binding: STB_GLOBAL
OpenPOWER on IntegriCloud