1 ## Test handling of a dynamic section size which is not a multiple of its entry size.
2 ## Test the full output to demonstrate how we print the warnings.
4 # RUN: yaml2obj %s --docnum=1 -o %t.bad-size
5 # RUN: llvm-readobj --all %t.bad-size 2>&1 \
6 # RUN: | FileCheck %s -DFILE=%t.bad-size --implicit-check-not=warning --check-prefix WARN
7 # RUN: llvm-readelf --all %t.bad-size 2>&1 \
8 # RUN: | FileCheck %s -DFILE=%t.bad-size --implicit-check-not=warning --check-prefix WARN-GNU
10 # WARN: warning: '[[FILE]]': invalid section size (4) or entity size (16)
11 # WARN: warning: '[[FILE]]': invalid section size (4) or entity size (16)
12 # WARN: warning: '[[FILE]]': no valid dynamic table was found
17 # WARN: ProgramHeaders [
19 # WARN-GNU: warning: '[[FILE]]': invalid section size (4) or entity size (16)
20 # WARN-GNU: warning: '[[FILE]]': invalid section size (4) or entity size (16)
21 # WARN-GNU: warning: '[[FILE]]': no valid dynamic table was found
22 # WARN-GNU-NEXT: ELF Header:
23 # WARN-GNU: Symbol table '.symtab' contains 1 entries:
48 ## Test handling of a .dynamic section with an invalid entsize (i.e. not 2 * sizeof(Elf_Dyn)).
49 # RUN: yaml2obj %s --docnum=2 -o %t.bad-entsize
50 # RUN: llvm-readobj --dynamic-table %t.bad-entsize | FileCheck %s --check-prefix BAD-ENTSIZE-LLVM
51 # RUN: llvm-readelf --dynamic-table %t.bad-entsize | FileCheck %s --check-prefix BAD-ENTSIZE-GNU
53 # BAD-ENTSIZE-LLVM: DynamicSection [ (2 entries)
54 # BAD-ENTSIZE-LLVM-NEXT: Tag Type Name/Value
55 # BAD-ENTSIZE-LLVM-NEXT: 0x0000000000000015 DEBUG 0x0
56 # BAD-ENTSIZE-LLVM-NEXT: 0x0000000000000000 NULL 0x0
57 # BAD-ENTSIZE-LLVM-NEXT: ]
59 # BAD-ENTSIZE-GNU: Dynamic section at offset 0x{{.*}} contains 2 entries:
60 # BAD-ENTSIZE-GNU-NEXT: Tag Type Name/Value
61 # BAD-ENTSIZE-GNU-NEXT: 0x0000000000000015 (DEBUG) 0x0
62 # BAD-ENTSIZE-GNU-NEXT: 0x0000000000000000 (NULL) 0x0
91 ## Test handling of string references pointing past the end of the dynamic string table.
92 # RUN: yaml2obj %s --docnum=3 -o %t.bad-string
93 # RUN: llvm-readobj --dynamic-table %t.bad-string | FileCheck %s --check-prefix BAD-STRING-LLVM
94 # RUN: llvm-readelf --dynamic-table %t.bad-string | FileCheck %s --check-prefix BAD-STRING-GNU
96 # BAD-STRING-LLVM: 0x000000000000000A STRSZ 1 (bytes)
97 # BAD-STRING-LLVM: 0x0000000000000001 NEEDED Shared library: [<Invalid offset 0x1>]
98 # BAD-STRING-LLVM: 0x000000007FFFFFFF FILTER Filter library: [<Invalid offset 0x1>]
99 # BAD-STRING-LLVM: 0x000000007FFFFFFD AUXILIARY Auxiliary library: [<Invalid offset 0x1>]
100 # BAD-STRING-LLVM: 0x000000007FFFFFFE USED Not needed object: [<Invalid offset 0x1>]
101 # BAD-STRING-LLVM: 0x000000000000000E SONAME Library soname: [<Invalid offset 0x1>]
102 # BAD-STRING-LLVM: 0x000000000000000F RPATH Library rpath: [<Invalid offset 0x1>]
103 # BAD-STRING-LLVM: 0x000000000000001D RUNPATH Library runpath: [<Invalid offset 0x1>]
105 # BAD-STRING-GNU: 0x000000000000000a (STRSZ) 1 (bytes)
106 # BAD-STRING-GNU: 0x0000000000000001 (NEEDED) Shared library: [<Invalid offset 0x1>]
107 # BAD-STRING-GNU: 0x000000007fffffff (FILTER) Filter library: [<Invalid offset 0x1>]
108 # BAD-STRING-GNU: 0x000000007ffffffd (AUXILIARY) Auxiliary library: [<Invalid offset 0x1>]
109 # BAD-STRING-GNU: 0x000000007ffffffe (USED) Not needed object: [<Invalid offset 0x1>]
110 # BAD-STRING-GNU: 0x000000000000000e (SONAME) Library soname: [<Invalid offset 0x1>]
111 # BAD-STRING-GNU: 0x000000000000000f (RPATH) Library rpath: [<Invalid offset 0x1>]
112 # BAD-STRING-GNU: 0x000000000000001d (RUNPATH) Library runpath: [<Invalid offset 0x1>]
160 ## Test handling of DT_STRTAB pointing outside the file's address space.
161 # RUN: yaml2obj %s --docnum=4 -o %t.bad-strtab
163 # RUN: llvm-readobj --dynamic-table %t.bad-strtab 2>&1 >/dev/null | FileCheck -DFILE=%t.bad-strtab %s --check-prefix BAD-STRTAB-ERR
164 # RUN: llvm-readelf --dynamic-table %t.bad-strtab 2>&1 >/dev/null | FileCheck -DFILE=%t.bad-strtab %s --check-prefix BAD-STRTAB-ERR
165 # BAD-STRTAB-ERR: warning: '[[FILE]]': Unable to parse DT_STRTAB: virtual address is not in any segment: 0x2000000
167 # RUN: llvm-readobj --dynamic-table --needed-libs %t.bad-strtab | FileCheck %s --check-prefixes=BAD-STRTAB,BAD-STRTAB-LLVM
168 # RUN: llvm-readelf --dynamic-table --needed-libs %t.bad-strtab | FileCheck %s --check-prefixes=BAD-STRTAB,BAD-STRTAB-GNU
169 # BAD-STRTAB-LLVM: LoadName: <String table is empty or was not found>
170 # BAD-STRTAB-LLVM: 0x0000000000000001 NEEDED Shared library: [<String table is empty or was not found>]
171 # BAD-STRTAB-GNU: 0x0000000000000001 (NEEDED) Shared library: [<String table is empty or was not found>]
172 # BAD-STRTAB: NeededLibraries [
173 # BAD-STRTAB: <String table is empty or was not found>
206 ## Test handling of other d_ptr tags pointing outside the file's address space.
207 # RUN: yaml2obj %s --docnum=5 -o %t.bad-rela
208 # RUN: llvm-readobj --dynamic-table %t.bad-rela 2>&1 | FileCheck -DFILE=%t.bad-rela %s --check-prefixes=CHECK,BAD-RELA
209 # RUN: llvm-readelf --dynamic-table %t.bad-rela 2>&1 | FileCheck -DFILE=%t.bad-rela %s --check-prefixes=CHECK,BAD-RELA-GNU
211 # CHECK: warning: '[[FILE]]': Unable to parse DT_RELA: virtual address is not in any segment: 0x1000000
213 # BAD-RELA: DynamicSection [ (2 entries)
214 # BAD-RELA-NEXT: Tag Type Name/Value
215 # BAD-RELA-NEXT: 0x0000000000000007 RELA 0x1000000
216 # BAD-RELA-NEXT: 0x0000000000000000 NULL 0x0
218 # BAD-RELA-GNU: Dynamic section at offset 0xb0 contains 2 entries:
219 # BAD-RELA-GNU-NEXT: Tag Type Name/Value
220 # BAD-RELA-GNU-NEXT: 0x0000000000000007 (RELA) 0x1000000
221 # BAD-RELA-GNU-NEXT: 0x0000000000000000 (NULL) 0x0