Skip to content

Commit e1f524e

Browse files
author
Georgii Rymar
committed
[llvm-readobj][llvm-readelf][test] - Add a few more dynamic section tests.
This adds a few more tests for dynamic section. We only had tests for simple unknown values for 64-bits target, in this patch I've added OS specific and processor specific tags. Also it tests both 32 and 64-bits targets now. It will help to fix the formatting issues we have and diagnose a possible new ones. Differential revision: https://reviews.llvm.org/D71896
1 parent 1d6b964 commit e1f524e

File tree

2 files changed

+716
-196
lines changed

2 files changed

+716
-196
lines changed

llvm/test/tools/llvm-objdump/elf-dynamic-section.test

Lines changed: 288 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,67 @@
1-
# RUN: yaml2obj %s > %t
2-
# RUN: llvm-objdump -p %t | FileCheck %s
1+
# RUN: yaml2obj --docnum=1 %s -o %t1
2+
# RUN: llvm-objdump -p %t1 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF64
33

4-
# CHECK:Dynamic Section:
5-
# CHECK-NEXT: NEEDED D
6-
# CHECK-NEXT: PLTRELSZ 0x0000000000000010
7-
# CHECK-NEXT: PLTGOT 0x0000000000001000
8-
# CHECK-NEXT: HASH 0x0000000000001000
9-
# CHECK-NEXT: STRTAB 0x0000000000001000
10-
# CHECK-NEXT: SYMTAB 0x0000000000001000
11-
# CHECK-NEXT: RELA 0x0000000000001000
12-
# CHECK-NEXT: RELASZ 0x0000000000000010
13-
# CHECK-NEXT: RELAENT 0x0000000000000789
14-
# CHECK-NEXT: STRSZ 0x0000000000000010
15-
# CHECK-NEXT: SYMENT 0x0000000000000987
16-
# CHECK-NEXT: INIT 0x0000000000001000
17-
# CHECK-NEXT: FINI 0x0000000000001000
18-
# CHECK-NEXT: SONAME U
19-
# CHECK-NEXT: RPATH f
20-
# CHECK-NEXT: SYMBOLIC 0x1234567890abcdef
21-
# CHECK-NEXT: REL 0x0000000000001000
22-
# CHECK-NEXT: RELSZ 0x0000000000000010
23-
# CHECK-NEXT: RELENT 0x0000000000000123
24-
# CHECK-NEXT: PLTREL 0x0000000000000007
25-
# CHECK-NEXT: DEBUG 0xfedcba0987654321
26-
# CHECK-NEXT: TEXTREL 0x1122334455667788
27-
# CHECK-NEXT: JMPREL 0x0000000000001000
28-
# CHECK-NEXT: BIND_NOW 0x8877665544332211
29-
# CHECK-NEXT: INIT_ARRAY 0x0000000000001000
30-
# CHECK-NEXT: FINI_ARRAY 0x0000000000001000
31-
# CHECK-NEXT: INIT_ARRAYSZ 0x0000000000000010
32-
# CHECK-NEXT: FINI_ARRAYSZ 0x0000000000000010
33-
# CHECK-NEXT: RUNPATH w
34-
# CHECK-NEXT: FLAGS 0xaabbccddeeff9900
35-
# CHECK-NEXT: PREINIT_ARRAY 0x0000000000001000
36-
# CHECK-NEXT: PREINIT_ARRAYSZ 0x0000000000000010
37-
# CHECK-NEXT: SYMTAB_SHNDX 0x0000000000001000
38-
# CHECK-NEXT: RELRSZ 0x0000000000000010
39-
# CHECK-NEXT: RELR 0x0000000000001000
40-
# CHECK-NEXT: RELRENT 0x0000000000004321
41-
# CHECK-NEXT: ANDROID_REL 0x0000000000001000
42-
# CHECK-NEXT: ANDROID_RELSZ 0x0000000000000010
43-
# CHECK-NEXT: ANDROID_RELA 0x0000000000001000
44-
# CHECK-NEXT: ANDROID_RELASZ 0x0000000000000010
45-
# CHECK-NEXT: ANDROID_RELR 0x0000000000001000
46-
# CHECK-NEXT: ANDROID_RELRSZ 0x0000000000000010
47-
# CHECK-NEXT: ANDROID_RELRENT 0x0000000000001234
48-
# CHECK-NEXT: GNU_HASH 0x0000000000001000
49-
# CHECK-NEXT: TLSDESC_PLT 0x0000000000001000
50-
# CHECK-NEXT: TLSDESC_GOT 0x0000000000001000
51-
# CHECK-NEXT: RELACOUNT 0x0000000000000000
52-
# CHECK-NEXT: RELCOUNT 0x0000000000000000
53-
# CHECK-NEXT: FLAGS_1 0x0000000087654321
54-
# CHECK-NEXT: VERSYM 0x0000000000001000
55-
# CHECK-NEXT: VERDEF 0x0000000000001000
56-
# CHECK-NEXT: VERDEFNUM 0x0000000000000000
57-
# CHECK-NEXT: VERNEED 0x0000000000001000
58-
# CHECK-NEXT: VERNEEDNUM 0x0000000000000000
59-
# CHECK-NEXT: AUXILIARY D
60-
# CHECK-NEXT: FILTER U
61-
# CHECK-NEXT: <unknown:>0x1234abcd 0x0000000000000001
4+
# ELF64:Dynamic Section:
5+
# ELF64-NEXT: NEEDED D
6+
# ELF64-NEXT: PLTRELSZ 0x0000000000000010
7+
# ELF64-NEXT: PLTGOT 0x0000000000001000
8+
# ELF64-NEXT: HASH 0x0000000000001000
9+
# ELF64-NEXT: STRTAB 0x0000000000001000
10+
# ELF64-NEXT: SYMTAB 0x0000000000001000
11+
# ELF64-NEXT: RELA 0x0000000000001000
12+
# ELF64-NEXT: RELASZ 0x0000000000000010
13+
# ELF64-NEXT: RELAENT 0x0000000000000789
14+
# ELF64-NEXT: STRSZ 0x0000000000000010
15+
# ELF64-NEXT: SYMENT 0x0000000000000987
16+
# ELF64-NEXT: INIT 0x0000000000001000
17+
# ELF64-NEXT: FINI 0x0000000000001000
18+
# ELF64-NEXT: SONAME U
19+
# ELF64-NEXT: RPATH f
20+
# ELF64-NEXT: SYMBOLIC 0x1234567890abcdef
21+
# ELF64-NEXT: REL 0x0000000000001000
22+
# ELF64-NEXT: RELSZ 0x0000000000000010
23+
# ELF64-NEXT: RELENT 0x0000000000000123
24+
# ELF64-NEXT: PLTREL 0x0000000000000007
25+
# ELF64-NEXT: DEBUG 0xfedcba0987654321
26+
# ELF64-NEXT: TEXTREL 0x1122334455667788
27+
# ELF64-NEXT: JMPREL 0x0000000000001000
28+
# ELF64-NEXT: BIND_NOW 0x8877665544332211
29+
# ELF64-NEXT: INIT_ARRAY 0x0000000000001000
30+
# ELF64-NEXT: FINI_ARRAY 0x0000000000001000
31+
# ELF64-NEXT: INIT_ARRAYSZ 0x0000000000000010
32+
# ELF64-NEXT: FINI_ARRAYSZ 0x0000000000000010
33+
# ELF64-NEXT: RUNPATH w
34+
# ELF64-NEXT: FLAGS 0xaabbccddeeff9900
35+
# ELF64-NEXT: PREINIT_ARRAY 0x0000000000001000
36+
# ELF64-NEXT: PREINIT_ARRAYSZ 0x0000000000000010
37+
# ELF64-NEXT: SYMTAB_SHNDX 0x0000000000001000
38+
# ELF64-NEXT: RELRSZ 0x0000000000000010
39+
# ELF64-NEXT: RELR 0x0000000000001000
40+
# ELF64-NEXT: RELRENT 0x0000000000004321
41+
# ELF64-NEXT: ANDROID_REL 0x0000000000001000
42+
# ELF64-NEXT: ANDROID_RELSZ 0x0000000000000010
43+
# ELF64-NEXT: ANDROID_RELA 0x0000000000001000
44+
# ELF64-NEXT: ANDROID_RELASZ 0x0000000000000010
45+
# ELF64-NEXT: ANDROID_RELR 0x0000000000001000
46+
# ELF64-NEXT: ANDROID_RELRSZ 0x0000000000000010
47+
# ELF64-NEXT: ANDROID_RELRENT 0x0000000000001234
48+
# ELF64-NEXT: GNU_HASH 0x0000000000001000
49+
# ELF64-NEXT: TLSDESC_PLT 0x0000000000001000
50+
# ELF64-NEXT: TLSDESC_GOT 0x0000000000001000
51+
# ELF64-NEXT: RELACOUNT 0x0000000000000000
52+
# ELF64-NEXT: RELCOUNT 0x0000000000000000
53+
# ELF64-NEXT: FLAGS_1 0x0000000087654321
54+
# ELF64-NEXT: VERSYM 0x0000000000001000
55+
# ELF64-NEXT: VERDEF 0x0000000000001000
56+
# ELF64-NEXT: VERDEFNUM 0x0000000000000000
57+
# ELF64-NEXT: VERNEED 0x0000000000001000
58+
# ELF64-NEXT: VERNEEDNUM 0x0000000000000000
59+
# ELF64-NEXT: AUXILIARY D
60+
# ELF64-NEXT: FILTER U
61+
# ELF64-NEXT: <unknown:>0x12345678 0x8765432187654321
62+
# ELF64-NEXT: <unknown:>0x6abcdef0 0x9988776655443322
63+
# ELF64-NEXT: <unknown:>0x76543210 0x5555666677778888
64+
# ELF64-NOT:{{.}}
6265

6366
--- !ELF
6467
FileHeader:
@@ -189,8 +192,232 @@ Sections:
189192
Value: 0x1
190193
- Tag: DT_FILTER
191194
Value: 0x3
192-
- Tag: 0x1234abcd
195+
## Show behaviour for unknown values in special and unmarked ranges.
196+
## An arbitrary unknown value outside of the special ranges.
197+
- Tag: 0x12345678
198+
Value: 0x8765432187654321
199+
## An OS specific tag.
200+
- Tag: 0x6abcdef0
201+
Value: 0x9988776655443322
202+
## A processor specific tags.
203+
- Tag: 0x76543210
204+
Value: 0x5555666677778888
205+
- Tag: DT_NULL
206+
Value: 0x0
207+
ProgramHeaders:
208+
- Type: PT_LOAD
209+
VAddr: 0x1000
210+
Sections:
211+
- Section: .dynstr
212+
- Section: .dynamic
213+
- Type: PT_DYNAMIC
214+
VAddr: 0x1010
215+
Sections:
216+
- Section: .dynamic
217+
218+
# RUN: yaml2obj --docnum=2 %s > %t2
219+
# RUN: llvm-objdump -p %t2 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF32
220+
221+
# ELF32:Dynamic Section:
222+
# ELF32-NEXT: NEEDED D
223+
# ELF32-NEXT: PLTRELSZ 0x00000010
224+
# ELF32-NEXT: PLTGOT 0x00001000
225+
# ELF32-NEXT: HASH 0x00001000
226+
# ELF32-NEXT: STRTAB 0x00001000
227+
# ELF32-NEXT: SYMTAB 0x00001000
228+
# ELF32-NEXT: RELA 0x00001000
229+
# ELF32-NEXT: RELASZ 0x00000010
230+
# ELF32-NEXT: RELAENT 0x00000789
231+
# ELF32-NEXT: STRSZ 0x00000010
232+
# ELF32-NEXT: SYMENT 0x00000987
233+
# ELF32-NEXT: INIT 0x00001000
234+
# ELF32-NEXT: FINI 0x00001000
235+
# ELF32-NEXT: SONAME U
236+
# ELF32-NEXT: RPATH f
237+
# ELF32-NEXT: SYMBOLIC 0x12345678
238+
# ELF32-NEXT: REL 0x00001000
239+
# ELF32-NEXT: RELSZ 0x00000010
240+
# ELF32-NEXT: RELENT 0x00000123
241+
# ELF32-NEXT: PLTREL 0x00000007
242+
# ELF32-NEXT: DEBUG 0xfedcba09
243+
# ELF32-NEXT: TEXTREL 0x11223344
244+
# ELF32-NEXT: JMPREL 0x00001000
245+
# ELF32-NEXT: BIND_NOW 0x88776655
246+
# ELF32-NEXT: INIT_ARRAY 0x00001000
247+
# ELF32-NEXT: FINI_ARRAY 0x00001000
248+
# ELF32-NEXT: INIT_ARRAYSZ 0x00000010
249+
# ELF32-NEXT: FINI_ARRAYSZ 0x00000010
250+
# ELF32-NEXT: RUNPATH w
251+
# ELF32-NEXT: FLAGS 0xaabbccdd
252+
# ELF32-NEXT: PREINIT_ARRAY 0x00001000
253+
# ELF32-NEXT: PREINIT_ARRAYSZ 0x00000010
254+
# ELF32-NEXT: SYMTAB_SHNDX 0x00001000
255+
# ELF32-NEXT: RELRSZ 0x00000010
256+
# ELF32-NEXT: RELR 0x00001000
257+
# ELF32-NEXT: RELRENT 0x00004321
258+
# ELF32-NEXT: ANDROID_REL 0x00001000
259+
# ELF32-NEXT: ANDROID_RELSZ 0x00000010
260+
# ELF32-NEXT: ANDROID_RELA 0x00001000
261+
# ELF32-NEXT: ANDROID_RELASZ 0x00000010
262+
# ELF32-NEXT: ANDROID_RELR 0x00001000
263+
# ELF32-NEXT: ANDROID_RELRSZ 0x00000010
264+
# ELF32-NEXT: ANDROID_RELRENT 0x00001234
265+
# ELF32-NEXT: GNU_HASH 0x00001000
266+
# ELF32-NEXT: TLSDESC_PLT 0x00001000
267+
# ELF32-NEXT: TLSDESC_GOT 0x00001000
268+
# ELF32-NEXT: RELACOUNT 0x00000000
269+
# ELF32-NEXT: RELCOUNT 0x00000000
270+
# ELF32-NEXT: FLAGS_1 0x87654321
271+
# ELF32-NEXT: VERSYM 0x00001000
272+
# ELF32-NEXT: VERDEF 0x00001000
273+
# ELF32-NEXT: VERDEFNUM 0x00000000
274+
# ELF32-NEXT: VERNEED 0x00001000
275+
# ELF32-NEXT: VERNEEDNUM 0x00000000
276+
# ELF32-NEXT: AUXILIARY D
277+
# ELF32-NEXT: FILTER U
278+
# ELF32-NEXT: <unknown:>0x12345678 0x87654321
279+
# ELF32-NEXT: <unknown:>0x6abcdef0 0x99887766
280+
# ELF32-NEXT: <unknown:>0x76543210 0x55556666
281+
282+
--- !ELF
283+
FileHeader:
284+
Class: ELFCLASS32
285+
Data: ELFDATA2LSB
286+
Type: ET_EXEC
287+
Machine: EM_386
288+
Sections:
289+
- Name: .dynstr
290+
Type: SHT_STRTAB
291+
Address: 0x1000
292+
Size: 0x10
293+
Content: "004400550066007700"
294+
- Name: .dynamic
295+
Type: SHT_DYNAMIC
296+
Address: 0x1010
297+
Link: 1
298+
Entries:
299+
- Tag: DT_NEEDED
193300
Value: 0x1
301+
- Tag: DT_PLTRELSZ
302+
Value: 0x10
303+
- Tag: DT_PLTGOT
304+
Value: 0x1000
305+
- Tag: DT_HASH
306+
Value: 0x1000
307+
- Tag: DT_STRTAB
308+
Value: 0x1000
309+
- Tag: DT_SYMTAB
310+
Value: 0x1000
311+
- Tag: DT_RELA
312+
Value: 0x1000
313+
- Tag: DT_RELASZ
314+
Value: 0x10
315+
- Tag: DT_RELAENT
316+
Value: 0x789
317+
- Tag: DT_STRSZ
318+
Value: 0x10
319+
- Tag: DT_SYMENT
320+
Value: 0x987
321+
- Tag: DT_INIT
322+
Value: 0x1000
323+
- Tag: DT_FINI
324+
Value: 0x1000
325+
- Tag: DT_SONAME
326+
Value: 0x3
327+
- Tag: DT_RPATH
328+
Value: 0x5
329+
- Tag: DT_SYMBOLIC
330+
Value: 0x12345678
331+
- Tag: DT_REL
332+
Value: 0x1000
333+
- Tag: DT_RELSZ
334+
Value: 0x10
335+
- Tag: DT_RELENT
336+
Value: 0x123
337+
- Tag: DT_PLTREL
338+
Value: 0x7
339+
- Tag: DT_DEBUG
340+
Value: 0xfedcba09
341+
- Tag: DT_TEXTREL
342+
Value: 0x11223344
343+
- Tag: DT_JMPREL
344+
Value: 0x1000
345+
- Tag: DT_BIND_NOW
346+
Value: 0x88776655
347+
- Tag: DT_INIT_ARRAY
348+
Value: 0x1000
349+
- Tag: DT_FINI_ARRAY
350+
Value: 0x1000
351+
- Tag: DT_INIT_ARRAYSZ
352+
Value: 0x10
353+
- Tag: DT_FINI_ARRAYSZ
354+
Value: 0x10
355+
- Tag: DT_RUNPATH
356+
Value: 0x7
357+
- Tag: DT_FLAGS
358+
Value: 0xaabbccdd
359+
- Tag: DT_PREINIT_ARRAY
360+
Value: 0x1000
361+
- Tag: DT_PREINIT_ARRAYSZ
362+
Value: 0x10
363+
- Tag: DT_SYMTAB_SHNDX
364+
Value: 0x1000
365+
- Tag: DT_RELRSZ
366+
Value: 0x10
367+
- Tag: DT_RELR
368+
Value: 0x1000
369+
- Tag: DT_RELRENT
370+
Value: 0x4321
371+
- Tag: DT_ANDROID_REL
372+
Value: 0x1000
373+
- Tag: DT_ANDROID_RELSZ
374+
Value: 0x10
375+
- Tag: DT_ANDROID_RELA
376+
Value: 0x1000
377+
- Tag: DT_ANDROID_RELASZ
378+
Value: 0x10
379+
- Tag: DT_ANDROID_RELR
380+
Value: 0x1000
381+
- Tag: DT_ANDROID_RELRSZ
382+
Value: 0x10
383+
- Tag: DT_ANDROID_RELRENT
384+
Value: 0x1234
385+
- Tag: DT_GNU_HASH
386+
Value: 0x1000
387+
- Tag: DT_TLSDESC_PLT
388+
Value: 0x1000
389+
- Tag: DT_TLSDESC_GOT
390+
Value: 0x1000
391+
- Tag: DT_RELACOUNT
392+
Value: 0x0
393+
- Tag: DT_RELCOUNT
394+
Value: 0x0
395+
- Tag: DT_FLAGS_1
396+
Value: 0x87654321
397+
- Tag: DT_VERSYM
398+
Value: 0x1000
399+
- Tag: DT_VERDEF
400+
Value: 0x1000
401+
- Tag: DT_VERDEFNUM
402+
Value: 0x0
403+
- Tag: DT_VERNEED
404+
Value: 0x1000
405+
- Tag: DT_VERNEEDNUM
406+
Value: 0x0
407+
- Tag: DT_AUXILIARY
408+
Value: 0x1
409+
- Tag: DT_FILTER
410+
Value: 0x3
411+
## Show behaviour for unknown values in special and unmarked ranges.
412+
## An arbitrary unknown value outside of the special ranges.
413+
- Tag: 0x12345678
414+
Value: 0x87654321
415+
## An OS specific tag.
416+
- Tag: 0x6abcdef0
417+
Value: 0x99887766
418+
## A processor specific tags.
419+
- Tag: 0x76543210
420+
Value: 0x55556666
194421
- Tag: DT_NULL
195422
Value: 0x0
196423
ProgramHeaders:

0 commit comments

Comments
 (0)