xref: /llvm-project/llvm/test/tools/obj2yaml/ELF/hash-section.yaml (revision 893c84d71c4ad223ae495d66a0c733a91c72e7bf)
1## Check how obj2yaml produces SHT_HASH section descriptions.
2
3## Check that obj2yaml uses "Bucket" and "Chain" tags to describe
4## a SHT_HASH section when it has content of a correct size.
5## I.e. data size == 4 * (2 + nbucket + nchain).
6
7# RUN: yaml2obj --docnum=1 %s -o %t1
8# RUN: obj2yaml %t1 | FileCheck %s --check-prefix=CHAIN-BUCKET
9
10# CHAIN-BUCKET:      - Name:  .hash1
11# CHAIN-BUCKET-NEXT:  Type:   SHT_HASH
12# CHAIN-BUCKET-NEXT:  Bucket: [ 3 ]
13# CHAIN-BUCKET-NEXT:  Chain:  [ 4, 5 ]
14# CHAIN-BUCKET:      - Name:  .hash2
15# CHAIN-BUCKET-NEXT:  Type:   SHT_HASH
16# CHAIN-BUCKET-NEXT:  Bucket: [  ]
17# CHAIN-BUCKET-NEXT:  Chain:  [  ]
18
19--- !ELF
20FileHeader:
21  Class: ELFCLASS32
22  Data:  ELFDATA2LSB
23  Type:  ET_DYN
24Sections:
25## Case 1: A non-empty hash table: nbucket == 1, nchain == 2.
26  - Name:    .hash1
27    Type:    SHT_HASH
28    Content: '0100000002000000030000000400000005000000'
29## Case 2: An empty hash table: nbucket == 0, nchain == 0.
30  - Name:    .hash2
31    Type:    SHT_HASH
32    Content: '0000000000000000'
33
34## Check that obj2yaml falls back to using the "Content" tag when
35## hash sections are broken.
36
37# RUN: yaml2obj --docnum=2 %s -o %t2
38# RUN: obj2yaml %t2 | FileCheck %s --check-prefix=CONTENT
39
40# CONTENT:      - Name:    .empty_hash
41# CONTENT-NEXT:   Type:    SHT_HASH
42# CONTENT-NEXT:   Content: ''
43# CONTENT-NEXT: - Name:    .invalid_header
44# CONTENT-NEXT:   Type:    SHT_HASH
45# CONTENT-NEXT:   Content: '00'
46# CONTENT-NEXT: - Name:    .truncated
47# CONTENT-NEXT:   Type:    SHT_HASH
48# CONTENT-NEXT:   Content: '01000000020000000300000004000000'
49# CONTENT-NEXT: - Name:    .oversized
50# CONTENT-NEXT:   Type:    SHT_HASH
51# CONTENT-NEXT:   Content: '0100000002000000030000000400000000'
52# CONTENT-NEXT: - Name:    .overflow1
53# CONTENT-NEXT:   Type:    SHT_HASH
54# CONTENT-NEXT:   Content: 01000000FFFFFFFF{{$}}
55# CONTENT-NEXT: - Name:    .overflow2
56# CONTENT-NEXT:   Type:    SHT_HASH
57# CONTENT-NEXT:   Content: FFFFFFFF01000000{{$}}
58# CONTENT-NEXT: ...
59
60--- !ELF
61FileHeader:
62  Class: ELFCLASS32
63  Data:  ELFDATA2LSB
64  Type:  ET_DYN
65Sections:
66## Case 1: section has no data.
67  - Name:    .empty_hash
68    Type:    SHT_HASH
69    Content: ''
70## Case 2: section size is less than 2 * 4.
71  - Name:    .invalid_header
72    Type:    SHT_HASH
73    Content: '00'
74## Case 3: nbucket == 1, nchain == 2.
75##         Section size is less than (2 * nbucket + nchain) * 4.
76  - Name:    .truncated
77    Type:    SHT_HASH
78    Content: '01000000020000000300000004000000'
79## Case 4: nbucket == 1, nchain == 2.
80##         Section size is greater than (2 * nbucket + nchain) * 4.
81  - Name:    .oversized
82    Type:    SHT_HASH
83    Content: '0100000002000000030000000400000000'
84## Case 5, 6: NChain/NBucket are incorrect and causing 32-bit
85##            unsigned overflows of intermediate expressions.
86  - Name:    .overflow1
87    Type:    SHT_HASH
88    Bucket:  [ ]
89    Chain:   [ ]
90    NBucket: 0x1
91    NChain:  0xffffffff
92  - Name:    .overflow2
93    Type:    SHT_HASH
94    Bucket:  [ ]
95    Chain:   [ ]
96    NBucket: 0xffffffff
97    NChain:  0x1
98
99## Check how we dump the "EntSize" field. When the sh_entsize is 4,
100## we don't print it, because it is the default value for the SHT_HASH section.
101
102# RUN: yaml2obj --docnum=3 %s -o %t3
103# RUN: obj2yaml %t3 | FileCheck %s --check-prefix=ENT-SIZE
104
105# ENT-SIZE:      - Name:    .hash.entsize.0
106# ENT-SIZE-NEXT:   Type:    SHT_HASH
107# ENT-SIZE-NEXT:   EntSize: 0x0
108# ENT-SIZE-NEXT:   Content: ''
109# ENT-SIZE-NEXT: - Name:    .hash.entsize.4.default
110# ENT-SIZE-NEXT:   Type:    SHT_HASH
111# ENT-SIZE-NEXT:   Content: ''
112# ENT-SIZE-NEXT: - Name:    .hash.entsize.255
113# ENT-SIZE-NEXT:   Type:    SHT_HASH
114# ENT-SIZE-NEXT:   EntSize: 0xFF
115# ENT-SIZE-NEXT:   Content: ''
116
117--- !ELF
118FileHeader:
119  Class: ELFCLASS32
120  Data:  ELFDATA2LSB
121  Type:  ET_DYN
122Sections:
123  - Name:    .hash.entsize.0
124    Type:    SHT_HASH
125    EntSize: 0
126    Size:    0
127  - Name:    .hash.entsize.4.default
128    Type:    SHT_HASH
129    EntSize: 4
130    Size:    0
131  - Name:    .hash.entsize.255
132    Type:    SHT_HASH
133    EntSize: 255
134    Size:    0
135