Recommit r371023 "[lib/ObjectYAML] - Stop calling error(1) when mapping the st_other...
[llvm-complete.git] / test / tools / yaml2obj / dynsymtab-implicit-sections-size-content.yaml
blobc8e583f5033cd210c1f2aa09ed84685b16160458
1 ## For implicit dynamic symbol table sections, `Size` and/or `Content`
2 ## fields can also be specified in YAML. Here we test the behavior in
3 ## different cases.
5 ## When no `Size` or `Content` is specified for a dynamic symbol table section,
6 ## yaml2obj writes the default content.
8 # RUN: yaml2obj --docnum=1 %s -o %t1
9 # RUN: llvm-readelf %t1 --dyn-symbols | FileCheck %s --check-prefix=CASE1
11 # CASE1:      Symbol table '.dynsym' contains 2 entries:
12 # CASE1-NEXT:    Num:    Value          Size Type    Bind   Vis      Ndx Name
13 # CASE1-NEXT:      0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
14 # CASE1-NEXT:      1: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND foo
15 # CASE1-EMPTY:
17 --- !ELF
18 FileHeader:
19   Class:   ELFCLASS64
20   Data:    ELFDATA2LSB
21   Type:    ET_DYN
22   Machine: EM_X86_64
23 Sections:
24   - Name: .dynsym
25     Type: SHT_DYNSYM
26 DynamicSymbols:
27   - Name:    foo
28     Binding: STB_GLOBAL
30 ## Specifying both `Size` and symbols at the same time is not allowed.
31 # RUN: not yaml2obj --docnum=2 %s -o %t2 2>&1 | FileCheck %s --check-prefix=CASE2
33 # CASE2: error: Cannot specify both `Size` and `DynamicSymbols` for symbol table section '.dynsym'.
35 --- !ELF
36 FileHeader:
37   Class:   ELFCLASS64
38   Data:    ELFDATA2LSB
39   Type:    ET_DYN
40   Machine: EM_X86_64
41 Sections:
42   - Name: .dynsym
43     Type: SHT_DYNSYM
44     Size: 0x100
45 DynamicSymbols:
46   - Name:    foo
47     Binding: STB_GLOBAL
49 ## Specifying both `Content` and symbols at the same time is not allowed.
50 # RUN: not yaml2obj --docnum=3 %s -o %t3 2>&1 | FileCheck %s --check-prefix=CASE3
52 # CASE3: error: Cannot specify both `Content` and `DynamicSymbols` for symbol table section '.dynsym'.
54 --- !ELF
55 FileHeader:
56   Class:   ELFCLASS64
57   Data:    ELFDATA2LSB
58   Type:    ET_DYN
59   Machine: EM_X86_64
60 Sections:
61   - Name: .dynsym
62     Type: SHT_DYNSYM
63     Content: "00"
64 DynamicSymbols:
65   - Name:    foo
66     Binding: STB_GLOBAL
68 ## Check we can use just `Content` to emit custom data in the symbol table section.
69 # RUN: yaml2obj --docnum=4 %s -o %t4
70 # RUN: llvm-readobj --section-data -S %t4 | FileCheck %s --check-prefix=CASE4
72 # CASE4:      Name: .dynsym
73 # CASE4-NEXT: Type: SHT_DYNSYM
74 # CASE4-NEXT: Flags [
75 # CASE4-NEXT:   SHF_ALLOC
76 # CASE4-NEXT: ]
77 # CASE4-NEXT: Address: 0x0
78 # CASE4-NEXT: Offset: 0x180
79 # CASE4-NEXT: Size: 2
80 # CASE4-NEXT: Link: 0
81 # CASE4-NEXT: Info: 1
82 # CASE4-NEXT: AddressAlignment: 0
83 # CASE4-NEXT: EntrySize: 24
84 # CASE4-NEXT: SectionData (
85 # CASE4-NEXT:   0000: 0123
86 # CASE4-NEXT: )
88 --- !ELF
89 FileHeader:
90   Class:   ELFCLASS64
91   Data:    ELFDATA2LSB
92   Type:    ET_DYN
93   Machine: EM_X86_64
94 Sections:
95   - Name: .dynsym
96     Type: SHT_DYNSYM
97     Content: "0123"
99 ## Check we can use just `Size` to emit custom data filled with zeroes
100 ## in the symbol table section.
101 # RUN: yaml2obj --docnum=5 %s -o %t5
102 # RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5
104 # CASE5:      Name: .dynsym
105 # CASE5-NEXT: Type: SHT_DYNSYM
106 # CASE5-NEXT: Flags [
107 # CASE5-NEXT:   SHF_ALLOC
108 # CASE5-NEXT: ]
109 # CASE5-NEXT: Address: 0x0
110 # CASE5-NEXT: Offset: 0x180
111 # CASE5-NEXT: Size: 5
112 # CASE5-NEXT: Link: 0
113 # CASE5-NEXT: Info: 1
114 # CASE5-NEXT: AddressAlignment: 0
115 # CASE5-NEXT: EntrySize: 24
116 # CASE5-NEXT: SectionData (
117 # CASE5-NEXT:   0000: 00000000 00
118 # CASE5-NEXT: )
120 --- !ELF
121 FileHeader:
122   Class:   ELFCLASS64
123   Data:    ELFDATA2LSB
124   Type:    ET_DYN
125   Machine: EM_X86_64
126 Sections:
127   - Name: .dynsym
128     Type: SHT_DYNSYM
129     Size: 5
131 ## Check we can specify both `Size` and `Content` when size is greater
132 ## than content size. In this case zeroes are added as padding
133 ## after after the specified content.
135 # RUN: yaml2obj --docnum=6 %s -o %t6
136 # RUN: llvm-readobj %t6 --section-data -S | FileCheck %s --check-prefix=CASE6
138 # CASE6:      Name: .dynsym
139 # CASE6-NEXT: Type: SHT_DYNSYM
140 # CASE6-NEXT: Flags [
141 # CASE6-NEXT:   SHF_ALLOC
142 # CASE6-NEXT: ]
143 # CASE6-NEXT: Address: 0x0
144 # CASE6-NEXT: Offset: 0x180
145 # CASE6-NEXT: Size: 4
146 # CASE6-NEXT: Link: 0
147 # CASE6-NEXT: Info: 1
148 # CASE6-NEXT: AddressAlignment: 0
149 # CASE6-NEXT: EntrySize: 24
150 # CASE6-NEXT: SectionData (
151 # CASE6-NEXT:   0000: 01230000
152 # CASE6-NEXT: )
154 --- !ELF
155 FileHeader:
156   Class:   ELFCLASS64
157   Data:    ELFDATA2LSB
158   Type:    ET_DYN
159   Machine: EM_X86_64
160 Sections:
161   - Name: .dynsym
162     Type: SHT_DYNSYM
163     Content: "0123"
164     Size: 4
166 ## Check we can specify both `Size` and `Content` when size is
167 ## equal to content size.
169 # RUN: yaml2obj --docnum=7 %s -o %t7
170 # RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7
172 # CASE7:       Name: .dynsym
173 # CASE7-NEXT:  Type: SHT_DYNSYM
174 # CASE7-NEXT:  Flags [
175 # CASE7-NEXT:    SHF_ALLOC
176 # CASE7-NEXT:  ]
177 # CASE7-NEXT:  Address: 0x0
178 # CASE7-NEXT:  Offset: 0x180
179 # CASE7-NEXT:  Size: 2
180 # CASE7-NEXT:  Link: 0
181 # CASE7-NEXT:  Info: 1
182 # CASE7-NEXT:  AddressAlignment: 0
183 # CASE7-NEXT:  EntrySize: 24
184 # CASE7-NEXT:  SectionData (
185 # CASE7-NEXT:    0000: 0123
186 # CASE7-NEXT:  )
188 --- !ELF
189 FileHeader:
190   Class:   ELFCLASS64
191   Data:    ELFDATA2LSB
192   Type:    ET_DYN
193   Machine: EM_X86_64
194 Sections:
195   - Name: .dynsym
196     Type: SHT_DYNSYM
197     Content: "0123"
198     Size: 2