[InstCombine] Signed saturation patterns
[llvm-core.git] / test / tools / llvm-readobj / stack-sizes.test
blob3d660fcd2563e15b20bf9feb993c6f90348b3eca
1 ## Check that we correctly display the contents of the .stack_sizes section
2 ## in a relocatable object file.
4 # RUN: yaml2obj --docnum=1 %s > %t01
5 # RUN: llvm-readelf --stack-sizes %t01 \
6 # RUN:   | FileCheck %s --check-prefix=RELOC-GNU --strict-whitespace --match-full-lines
7 # RUN: llvm-readobj --stack-sizes %t01 | FileCheck %s --check-prefix=RELOC-LLVM
9 #      RELOC-GNU:         Size     Function
10 # RELOC-GNU-NEXT:           16     referenced_by_symbol_foo
11 # RELOC-GNU-NEXT:           32     referenced_via_section_bar
12 # RELOC-GNU-NEXT:            8     separate_text_section_baz
13 #  RELOC-GNU-NOT:{{.}}
15 # RELOC-LLVM:      StackSizes [
16 # RELOC-LLVM-NEXT:   Entry {
17 # RELOC-LLVM-NEXT:     Function: referenced_by_symbol_foo
18 # RELOC-LLVM-NEXT:     Size: 0x10
19 # RELOC-LLVM-NEXT:   }
20 # RELOC-LLVM-NEXT:   Entry {
21 # RELOC-LLVM-NEXT:     Function: referenced_via_section_bar
22 # RELOC-LLVM-NEXT:     Size: 0x20
23 # RELOC-LLVM-NEXT:   }
24 # RELOC-LLVM-NEXT:   Entry {
25 # RELOC-LLVM-NEXT:     Function: separate_text_section_baz
26 # RELOC-LLVM-NEXT:     Size: 0x8
27 # RELOC-LLVM-NEXT:   }
28 # RELOC-LLVM-NEXT: ]
30 --- !ELF
31 FileHeader:
32   Class:   ELFCLASS64
33   Data:    ELFDATA2LSB
34   Type:    ET_REL
35   Machine: EM_X86_64
36 Sections:
37   - Name:    .text
38     Type:    SHT_PROGBITS
39     Flags:   [SHF_ALLOC]
40     Size:    16
41   - Name:    .text.baz
42     Type:    SHT_PROGBITS
43     Flags:   [SHF_ALLOC]
44     Size:    16
45   - Name:    .stack_sizes
46     Type:    SHT_PROGBITS
47     Entries:
48       - Size: 0x10
49       - Size: 0x20
50     Link:    .text
51   - Name:    '.stack_sizes [1]'
52     Type:    SHT_PROGBITS
53     Entries:
54       - Address: 0x20
55         Size:    0x8
56     Link:    .text.baz
57   - Name:    .rela.stack_sizes
58     Type:    SHT_RELA
59     Info:    .stack_sizes
60     Relocations:
61 ## A symbol relative reference. 
62       - Offset: 0
63         Symbol: referenced_by_symbol_foo 
64         Type:   R_X86_64_64
65 ## A section relative reference. 
66       - Offset: 9
67         Addend: 16
68         Symbol: .text
69         Type:   R_X86_64_64
70   - Name:   '.rela.stack_sizes [1]'
71     Type:   SHT_RELA
72     Info:   '.stack_sizes [1]'
73     Relocations:
74       - Offset: 0
75         Symbol: separate_text_section_baz
76         Type:   R_X86_64_64
77 Symbols:
78   - Name:    separate_text_section_baz
79     Section: .text.baz
80     Type:    STT_FUNC
81   - Name:    .text
82     Section: .text
83     Type:    STT_SECTION
84   - Name:    referenced_by_symbol_foo
85     Section: .text
86     Type:    STT_FUNC
87     Binding: STB_GLOBAL
88   - Name:    referenced_via_section_bar
89     Section: .text
90     Value:   0x10
91     Type:    STT_FUNC
92     Binding: STB_GLOBAL
94 ## Check that we correctly report the stack sizes in an executable (non-relocatable)
95 ## object file.
97 # RUN: yaml2obj --docnum=2 %s > %t02
98 # RUN: llvm-readelf --stack-sizes %t02 \
99 # RUN:   | FileCheck %s --check-prefix=EXEC-GNU --strict-whitespace --match-full-lines
100 # RUN: llvm-readobj --stack-sizes %t02 | FileCheck %s --check-prefix=EXEC-LLVM
102 #      EXEC-GNU:         Size     Function
103 # EXEC-GNU-NEXT:           16     foo
104 # EXEC-GNU-NEXT:           32     bar
105 #  EXEC-GNU-NOT:{{.}}
107 # EXEC-LLVM:      StackSizes [
108 # EXEC-LLVM-NEXT:   Entry {
109 # EXEC-LLVM-NEXT:     Function: foo
110 # EXEC-LLVM-NEXT:     Size: 0x10
111 # EXEC-LLVM-NEXT:   }
112 # EXEC-LLVM-NEXT:   Entry {
113 # EXEC-LLVM-NEXT:     Function: bar
114 # EXEC-LLVM-NEXT:     Size: 0x20
115 # EXEC-LLVM-NEXT:   }
116 # EXEC-LLVM-NEXT: ]
118 --- !ELF
119 FileHeader:
120   Class:   ELFCLASS64
121   Data:    ELFDATA2LSB
122   Type:    ET_EXEC
123   Machine: EM_X86_64
124 Sections:
125   - Name:    .text
126     Type:    SHT_PROGBITS
127     Flags:   [SHF_ALLOC]
128     Size:    16
129   - Name:    .stack_sizes
130     Type:    SHT_PROGBITS
131     Entries:
132       - Address: 0x10
133         Size:    0x10
134       - Address: 0x20
135         Size:    0x20
136     Link:    .text
137 Symbols:
138   - Name:    foo
139     Section: .text
140     Value:   0x10
141     Type:    STT_FUNC
142     Binding: STB_GLOBAL
143   - Name:    bar
144     Section: .text
145     Value:   0x20
146     Type:    STT_FUNC
147     Binding: STB_GLOBAL
149 ## Check that we report an error when we find relocations whose offsets point outside
150 ## of the .stack_sizes section.
152 # RUN: yaml2obj --docnum=3 %s > %t03
153 # RUN: not llvm-readelf --stack-sizes %t03 2>&1 | FileCheck %s --check-prefix=SHORT -DFILE=%t03
154 # RUN: not llvm-readobj --stack-sizes %t03 2>&1 | FileCheck %s --check-prefix=SHORT -DFILE=%t03
156 # SHORT: error: '[[FILE]]': found invalid relocation offset into section .stack_sizes while trying to extract a stack size entry
158 --- !ELF
159 FileHeader:
160   Class:   ELFCLASS64
161   Data:    ELFDATA2LSB
162   Type:    ET_REL
163   Machine: EM_X86_64
164 Sections:
165   - Name:    .text
166     Type:    SHT_PROGBITS
167     Flags:   [SHF_ALLOC]
168     Size:    16
169   - Name:    .stack_sizes
170     Type:    SHT_PROGBITS
171     Content: "00"
172     Link:    .text
173   - Name:    .rela.stack_sizes
174     Type:    SHT_RELA
175     Info:    .stack_sizes
176     Relocations:
177       - Offset: 1
178         Symbol: foo 
179         Type:   R_X86_64_64
180 Symbols:
181   - Name:    foo
182     Section: .text
183     Type:    STT_FUNC
184     Binding: STB_GLOBAL
186 ## Check that we warn about a function symbol that is not in the section
187 ## that is referenced by the stack sizes section's sh_link.
189 # RUN: yaml2obj --docnum=4 %s > %t04
190 # RUN: llvm-readelf --stack-sizes %t04 2> %t04-gnu.err | FileCheck %s --check-prefix=WRONGSECTION-GNU
191 # RUN: FileCheck %s < %t04-gnu.err --check-prefix=WRONGSECTION-ERR -DFILE=%t04
192 # RUN: llvm-readobj --stack-sizes %t04 2> %t04-llvm.err | FileCheck %s --check-prefix=WRONGSECTION-LLVM
193 # RUN: FileCheck %s < %t04-llvm.err --check-prefix=WRONGSECTION-ERR -DFILE=%t04
195 # RUN: llvm-readelf --stack-sizes --demangle %t04 2>&1 | FileCheck %s --check-prefix=WRONGSECTION-DEMANGLE-ERR -DFILE=%t04
196 # RUN: llvm-readobj --stack-sizes --demangle %t04 2>&1 | FileCheck %s --check-prefix=WRONGSECTION-DEMANGLE-ERR -DFILE=%t04
198 # WRONGSECTION-GNU:      Size Function
199 # WRONGSECTION-GNU-NEXT: 8 _Z3foof
201 # WRONGSECTION-LLVM:      StackSizes [
202 # WRONGSECTION-LLVM-NEXT:   Entry {
203 # WRONGSECTION-LLVM-NEXT:     Function: _Z3foof
204 # WRONGSECTION-LLVM-NEXT:     Size: 0x8
205 # WRONGSECTION-LLVM-NEXT:   }
206 # WRONGSECTION-LLVM-NEXT: ]
208 # WRONGSECTION-ERR:           warning: '[[FILE]]': relocation symbol '_Z3foof' is not in the expected section
209 # WRONGSECTION-DEMANGLE-ERR:  warning: '[[FILE]]': relocation symbol 'foo(float)' is not in the expected section
211 --- !ELF
212 FileHeader:
213   Class:   ELFCLASS64
214   Data:    ELFDATA2LSB
215   Type:    ET_REL
216   Machine: EM_X86_64
217 Sections:
218   - Name:    .text
219     Type:    SHT_PROGBITS
220     Size:    8
221   - Name:    .text2
222     Type:    SHT_PROGBITS
223     Size:    8
224     Flags:   [SHF_ALLOC]
225   - Name:    .stack_sizes
226     Type:    SHT_PROGBITS
227     Entries:
228       - Size: 0x8
229     Link:    .text2
230   - Name:    .rela.stack_sizes
231     Type:    SHT_RELA
232     Info:    .stack_sizes
233     Relocations:
234       - Offset: 0
235         Symbol: _Z3foof
236         Type:   R_X86_64_64
237 Symbols:
238   - Name:    _Z3foof
239     Section: .text
240     Type:    STT_FUNC
241     Binding: STB_GLOBAL
243 ## Check that we report an error when a stack sizes section ends with an incomplete stack size entry.
245 # RUN: yaml2obj --docnum=5 %s > %t05
246 # RUN: not llvm-readelf --stack-sizes %t05 2>&1 | \
247 # RUN:    FileCheck %s --check-prefix=SUDDENEND -DFILE=%t05
248 # RUN: not llvm-readobj --stack-sizes %t05 2>&1 | \
249 # RUN:    FileCheck %s --check-prefix=SUDDENEND -DFILE=%t05
251 # SUDDENEND: error: '[[FILE]]': section .stack_sizes ended while trying to extract a stack size entry
253 --- !ELF
254 FileHeader:
255   Class:   ELFCLASS64
256   Data:    ELFDATA2LSB
257   Type:    ET_EXEC
258   Machine: EM_X86_64
259 Sections:
260   - Name:    .text
261     Type:    SHT_PROGBITS
262     Flags:   [SHF_ALLOC]
263     Size:    16
264   - Name:    .stack_sizes
265     Type:    SHT_PROGBITS
266     Content: "10000000"
267     Link:    .text
268 Symbols:
269   - Name:    foo
270     Section: .text
271     Value:   0x10
272     Type:    STT_FUNC
273     Binding: STB_GLOBAL
275 ## Check that we report an invalid stack size, which is represented by a ULEB that
276 ## ends in a byte with the high bit set.
278 # RUN: yaml2obj --docnum=6 %s > %t06
279 # RUN: not llvm-readelf --stack-sizes %t06 2>&1 | FileCheck %s --check-prefix=BADSIZE -DFILE=%t06
280 # RUN: not llvm-readobj --stack-sizes %t06 2>&1 | FileCheck %s --check-prefix=BADSIZE -DFILE=%t06
282 # BADSIZE: error: '[[FILE]]': could not extract a valid stack size in section .stack_sizes
284 --- !ELF
285 FileHeader:
286   Class:   ELFCLASS64
287   Data:    ELFDATA2LSB
288   Type:    ET_EXEC
289   Machine: EM_X86_64
290 Sections:
291   - Name:    .text
292     Type:    SHT_PROGBITS
293     Flags:   [SHF_ALLOC]
294     Size:    16
295   - Name:    .stack_sizes
296     Type:    SHT_PROGBITS
297     Content: "100000000000000080"
298     Link:    .text
299 Symbols:
300   - Name:    foo
301     Section: .text
302     Value:   0x10
303     Type:    STT_FUNC
304     Binding: STB_GLOBAL
306 ## Check that we report a warning when a relocation symbol does not belong to a
307 ## valid section. We expect a stack size entry with an unknown symbol in the 
308 ## output.
310 # RUN: yaml2obj --docnum=7 %s > %t07
311 # RUN: llvm-readelf --stack-sizes %t07 2> %t07-gnu.err | FileCheck %s --check-prefix=BADSECTION-OUT-GNU
312 # RUN: FileCheck %s < %t07-gnu.err --check-prefix=BADSECTION-ERR -DFILE=%t07
313 # RUN: llvm-readobj --stack-sizes %t07 2> %t07-llvm.err | FileCheck %s --check-prefix=BADSECTION-OUT-LLVM
314 # RUN: FileCheck %s < %t07-llvm.err --check-prefix=BADSECTION-ERR -DFILE=%t07
316 # RUN: llvm-readelf --stack-sizes --demangle %t07 2>&1 | FileCheck %s --check-prefix=BADSECTION-DEMANGLE-ERR -DFILE=%t07
317 # RUN: llvm-readobj --stack-sizes --demangle %t07 2>&1 | FileCheck %s --check-prefix=BADSECTION-DEMANGLE-ERR -DFILE=%t07
319 # BADSECTION-OUT-GNU: Size Function
320 # BADSECTION-OUT-GNU:    8 ?
322 # BADSECTION-OUT-LLVM:      StackSizes [
323 # BADSECTION-OUT-LLVM-NEXT:   Entry {
324 # BADSECTION-OUT-LLVM-NEXT:     Function: ?
325 # BADSECTION-OUT-LLVM-NEXT:     Size: 0x8
326 # BADSECTION-OUT-LLVM-NEXT:   }
327 # BADSECTION-OUT-LLVM-NEXT: ]
329 # BADSECTION-ERR: warning: '[[FILE]]': cannot identify the section for relocation symbol '_Z3foof'
330 # BADSECTION-DEMANGLE-ERR: warning: '[[FILE]]': cannot identify the section for relocation symbol 'foo(float)'
332 --- !ELF
333 FileHeader:
334   Class:   ELFCLASS64
335   Data:    ELFDATA2LSB
336   Type:    ET_REL
337   Machine: EM_X86_64
338 Sections:
339   - Name:    .text
340     Type:    SHT_PROGBITS
341     Size:    8
342   - Name:    .stack_sizes
343     Type:    SHT_PROGBITS
344     Link:    .text
345     Entries:
346       - Size: 0x8
347   - Name:    .rela.stack_sizes
348     Type:    SHT_RELA
349     Info:    .stack_sizes
350     Relocations:
351     - Offset: 0
352       Symbol: _Z3foof
353       Type:   R_X86_64_64
354 Symbols:
355   - Name:    _Z3foof
356 ## An invalid section index.
357     Index:   10
358     Type:    STT_FUNC
359     Binding: STB_GLOBAL
361 ## Check that we report a warning when a stack sizes section does not come with
362 ## a corresponding relocation section.
364 # RUN: yaml2obj --docnum=8 %s > %t08
365 # RUN: llvm-readelf --stack-sizes %t08 2> %t08-gnu.err | FileCheck %s --check-prefix=NORELOCSECTION-OUT-GNU
366 # RUN: FileCheck %s < %t08-gnu.err --check-prefix=NORELOCSECTION-ERR -DFILE=%t08
367 # RUN: llvm-readobj --stack-sizes %t08 2> %t08-llvm.err | FileCheck %s --check-prefix=NORELOCSECTION-OUT-LLVM
368 # RUN: FileCheck %s < %t08-llvm.err --check-prefix=NORELOCSECTION-ERR -DFILE=%t08
370 # NORELOCSECTION-OUT-GNU:     Size Function
371 # NORELOCSECTION-OUT-GNU-NOT: {{.}}
373 # NORELOCSECTION-OUT-LLVM:      StackSizes [
374 # NORELOCSECTION-OUT-LLVM-NEXT: ]
376 # NORELOCSECTION-ERR: warning: '[[FILE]]': section .stack_sizes does not have a corresponding relocation section
378 --- !ELF
379 FileHeader:
380   Class:   ELFCLASS64
381   Data:    ELFDATA2LSB
382   Type:    ET_REL
383   Machine: EM_X86_64
384 Sections:
385   - Name:    .text
386     Type:    SHT_PROGBITS
387     Size:    8
388   - Name:    .stack_sizes
389     Type:    SHT_PROGBITS
390     Link:    .text
391     Entries:
392       - Size: 0x1
394 ## Check that we handle multiple object files, separately and when they
395 ## are in an archive. This also checks whether we have blank lines between the
396 ## tables.
398 # RUN: llvm-ar rc %t1.a %t01 %t02
399 # RUN: llvm-readelf --stack-sizes %t01 %t02 \
400 # RUN:   | FileCheck %s --check-prefixes=MULTIPLE-GNU,OBJECT -DFILE1=%t01 -DFILE2=%t02
401 # RUN: llvm-readelf --stack-sizes %t1.a \
402 # RUN:   | FileCheck %s --check-prefixes=MULTIPLE-GNU,ARCHIVE --strict-whitespace\
403 # RUN:   --match-full-lines -DFILE=%t1.a
404 # RUN: llvm-readobj --stack-sizes %t01 %t02 \
405 # RUN:   | FileCheck %s --check-prefixes=MULTIPLE-LLVM,OBJECT -DFILE1=%t01 -DFILE2=%t02
406 # RUN: llvm-readobj --stack-sizes %t1.a \
407 # RUN:   | FileCheck %s --check-prefixes=MULTIPLE-LLVM,ARCHIVE -DFILE=%t1.a
409 #        OBJECT:File: [[FILE1]]
410 #       ARCHIVE:File: [[FILE]]({{.*01}})
412 #      MULTIPLE-GNU:Stack Sizes:
413 # MULTIPLE-GNU-NEXT:         Size     Function
414 # MULTIPLE-GNU-NEXT:           16     referenced_by_symbol_foo
415 # MULTIPLE-GNU-NEXT:           32     referenced_via_section_bar
416 # MULTIPLE-GNU-NEXT:            8     separate_text_section_baz
417 # MULTIPLE-GNU-EMPTY:
419 # MULTIPLE-LLVM:      StackSizes [
420 # MULTIPLE-LLVM-NEXT:   Entry {
421 # MULTIPLE-LLVM-NEXT:     Function: referenced_by_symbol_foo
422 # MULTIPLE-LLVM-NEXT:     Size: 0x10
423 # MULTIPLE-LLVM-NEXT:   }
424 # MULTIPLE-LLVM-NEXT:   Entry {
425 # MULTIPLE-LLVM-NEXT:     Function: referenced_via_section_bar
426 # MULTIPLE-LLVM-NEXT:     Size: 0x20
427 # MULTIPLE-LLVM-NEXT:   }
428 # MULTIPLE-LLVM-NEXT:   Entry {
429 # MULTIPLE-LLVM-NEXT:     Function: separate_text_section_baz
430 # MULTIPLE-LLVM-NEXT:     Size: 0x8
431 # MULTIPLE-LLVM-NEXT:   }
432 # MULTIPLE-LLVM-NEXT: ]
434 #        OBJECT:File: [[FILE2]]
435 #       ARCHIVE:File: [[FILE]]({{.*02}})
437 # MULTIPLE-GNU-EMPTY:
438 # MULTIPLE-GNU-NEXT:Stack Sizes:
439 # MULTIPLE-GNU-NEXT:         Size     Function
440 # MULTIPLE-GNU-NEXT:           16     foo
441 # MULTIPLE-GNU-NEXT:           32     bar
443 # MULTIPLE-LLVM:      StackSizes [
444 # MULTIPLE-LLVM-NEXT:   Entry {
445 # MULTIPLE-LLVM-NEXT:     Function: foo
446 # MULTIPLE-LLVM-NEXT:     Size: 0x10
447 # MULTIPLE-LLVM-NEXT:   }
448 # MULTIPLE-LLVM-NEXT:   Entry {
449 # MULTIPLE-LLVM-NEXT:     Function: bar
450 # MULTIPLE-LLVM-NEXT:     Size: 0x20
451 # MULTIPLE-LLVM-NEXT:   }
452 # MULTIPLE-LLVM-NEXT: ]
454 ## Check that we do not consider symbols that are not function symbols, even though
455 ## a relocation references them. 
457 # RUN: yaml2obj --docnum=9 %s > %t14
458 # RUN: llvm-readelf --stack-sizes %t14 2> %t14-gnu.err | FileCheck %s --check-prefix=NONFUNCTIONSYM-GNU
459 # RUN: FileCheck %s < %t14-gnu.err --check-prefix=NONFUNCTIONSYM-ERR -DFILE=%t14
460 # RUN: llvm-readobj --stack-sizes %t14 2> %t14-llvm.err | FileCheck %s --check-prefix=NONFUNCTIONSYM-LLVM
461 # RUN: FileCheck %s < %t14-llvm.err --check-prefix=NONFUNCTIONSYM-ERR -DFILE=%t14
463 # NONFUNCTIONSYM-GNU:     Stack Sizes:
464 # NONFUNCTIONSYM-GNU:     0 ?
466 # NONFUNCTIONSYM-LLVM:      StackSizes [
467 # NONFUNCTIONSYM-LLVM-NEXT:   Entry {
468 # NONFUNCTIONSYM-LLVM-NEXT:     Function: ?
469 # NONFUNCTIONSYM-LLVM-NEXT:     Size: 0x0
470 # NONFUNCTIONSYM-LLVM-NEXT:   }
471 # NONFUNCTIONSYM-LLVM-NEXT: ]
473 # NONFUNCTIONSYM-ERR: warning: '[[FILE]]': could not identify function symbol for stack size entry
475 --- !ELF
476 FileHeader:
477   Class:   ELFCLASS64
478   Data:    ELFDATA2LSB
479   Type:    ET_REL
480   Machine: EM_X86_64
481 Sections:
482   - Name: .text
483     Type: SHT_PROGBITS
484     Size: 16
485   - Name: .stack_sizes
486     Type: SHT_PROGBITS
487     Entries:
488       - Size: 0
489     Link: .text
490   - Name: .rela.stack_sizes
491     Type: SHT_RELA
492     Info: .stack_sizes
493     Relocations:
494       - Offset: 0
495         Symbol: foo 
496         Type:   R_X86_64_64
497 Symbols:
498   - Name:    foo
499     Section: .text
500     Type:    STT_OBJECT
501     Binding: STB_GLOBAL
503 ## Check that we report an error when we find an unsupported relocation
504 ## in the section that contains the stack size entries' relocations.
506 # RUN: yaml2obj --docnum=10 %s > %t15
507 # RUN: not llvm-readelf --stack-sizes %t15 2>&1 | FileCheck %s --check-prefix=UNSUPPRELOC -DFILE=%t15
508 # RUN: not llvm-readobj --stack-sizes %t15 2>&1 | FileCheck %s --check-prefix=UNSUPPRELOC -DFILE=%t15
510 # UNSUPPRELOC: error: '[[FILE]]': unsupported relocation type in section .rela.stack_sizes: R_X86_64_RELATIVE
512 --- !ELF
513 FileHeader:
514   Class:   ELFCLASS64
515   Data:    ELFDATA2LSB
516   Type:    ET_REL
517   Machine: EM_X86_64
518 Sections:
519   - Name: .text
520     Type: SHT_PROGBITS
521     Size: 8
522   - Name: .stack_sizes
523     Type: SHT_PROGBITS
524     Link: .text
525     Entries: []
526   - Name: .rela.stack_sizes
527     Type: SHT_RELA
528     Info: .stack_sizes
529     Relocations:
530       - Offset: 0
531         Symbol: foo 
532         Type:   R_X86_64_RELATIVE
533 Symbols:
534   - Name:    foo
535     Section: .text
536     Type:    STT_FUNC
537     Binding: STB_GLOBAL
539 ## Check that warning messages in archives do not impact other members. In the following
540 ## test, the first archive member generates a warning and we make sure all the information
541 ## is still dumped.
543 # RUN: llvm-ar rc %t2.a %t04 %t01
544 # RUN: llvm-readelf --stack-sizes %t2.a 2>&1 | FileCheck %s --check-prefix=ARCHIVEWARN-GNU \
545 # RUN:   -DFILE=%t2.a --strict-whitespace --match-full-lines
546 # RUN: llvm-readobj --stack-sizes %t2.a 2>&1 | FileCheck %s --check-prefix=ARCHIVEWARN-LLVM -DFILE=%t2.a
548 #      ARCHIVEWARN-GNU:File: [[FILE]]({{.*04}})
549 #      ARCHIVEWARN-GNU:Stack Sizes:
550 # ARCHIVEWARN-GNU-NEXT:         Size     Function
551 #      ARCHIVEWARN-GNU:{{.*}}: warning: '{{.*04}}': relocation symbol '_Z3foof' is not in the expected section
552 #      ARCHIVEWARN-GNU:            8     _Z3foof
553 #      ARCHIVEWARN-GNU:File: [[FILE]]({{.*01}})
554 #      ARCHIVEWARN-GNU:Stack Sizes:
555 # ARCHIVEWARN-GNU-NEXT:         Size     Function
556 # ARCHIVEWARN-GNU-NEXT:           16     referenced_by_symbol_foo
557 # ARCHIVEWARN-GNU-NEXT:           32     referenced_via_section_bar
558 # ARCHIVEWARN-GNU-NEXT:            8     separate_text_section_baz
559 #  ARCHIVEWARN-GNU-NOT:{{.}}
562 # ARCHIVEWARN-LLVM:      File: [[FILE]]({{.*04}})
563 # ARCHIVEWARN-LLVM:      StackSizes [
564 # ARCHIVEWARN-LLVM:      warning: '{{.*04}}': relocation symbol '_Z3foof' is not in the expected section
565 # ARCHIVEWARN-LLVM-NEXT:   Entry {
566 # ARCHIVEWARN-LLVM-NEXT:     Function: _Z3foof
567 # ARCHIVEWARN-LLVM-NEXT:     Size: 0x8
568 # ARCHIVEWARN-LLVM-NEXT:   }
569 # ARCHIVEWARN-LLVM-NEXT: ]
570 # ARCHIVEWARN-LLVM:      File: [[FILE]]({{.*01}})
571 # ARCHIVEWARN-LLVM:      StackSizes [
572 # ARCHIVEWARN-LLVM-NEXT:   Entry {
573 # ARCHIVEWARN-LLVM-NEXT:     Function: referenced_by_symbol_foo
574 # ARCHIVEWARN-LLVM-NEXT:     Size: 0x10
575 # ARCHIVEWARN-LLVM-NEXT:   }
576 # ARCHIVEWARN-LLVM-NEXT:   Entry {
577 # ARCHIVEWARN-LLVM-NEXT:     Function: referenced_via_section_bar
578 # ARCHIVEWARN-LLVM-NEXT:     Size: 0x20
579 # ARCHIVEWARN-LLVM-NEXT:   }
580 # ARCHIVEWARN-LLVM-NEXT:   Entry {
581 # ARCHIVEWARN-LLVM-NEXT:     Function: separate_text_section_baz
582 # ARCHIVEWARN-LLVM-NEXT:     Size: 0x8
583 # ARCHIVEWARN-LLVM-NEXT:   }
584 # ARCHIVEWARN-LLVM-NEXT: ]
586 ## Check that we demangle function names when requested.
588 # RUN: yaml2obj --docnum=11 %s > %t16
589 # RUN: llvm-readelf --stack-sizes --demangle %t16 | FileCheck %s --check-prefix=DEMANGLE-GNU
590 # RUN: llvm-readobj --stack-sizes --demangle %t16 | FileCheck %s --check-prefix=DEMANGLE-LLVM
592 # DEMANGLE-GNU:  16 foo(float)
593 # DEMANGLE-LLVM: Function: foo(float)
595 --- !ELF
596 FileHeader:
597   Class:   ELFCLASS64
598   Data:    ELFDATA2LSB
599   Type:    ET_EXEC
600   Machine: EM_X86_64
601 Sections:
602   - Name:    .text
603     Type:    SHT_PROGBITS
604     Flags:   [SHF_ALLOC]
605     Size:    16
606   - Name:    .stack_sizes
607     Type:    SHT_PROGBITS
608     Entries:
609       - Address: 0x10
610         Size:    0x10
611     Link:    .text
612 Symbols:
613   - Name:    _Z3foof
614     Section: .text
615     Value:   0x10
616     Type:    STT_FUNC
617     Binding: STB_GLOBAL
619 ## Check that we report an error when we are unable to resolve a relocation for a given ELF architecture.
620 ## Here we have a 64-bit relocation used in a 32-bit object.
622 # RUN: yaml2obj --docnum=12 %s > %t17
623 # RUN: not llvm-readelf --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
624 # RUN: not llvm-readobj --stack-sizes %t17 2>&1 | FileCheck %s -DFILE=%t17 --check-prefix=UNSUPPRELOC2
626 # UNSUPPRELOC2: error: '[[FILE]]': unsupported relocation type in section .rela.stack_sizes: R_X86_64_64
628 --- !ELF
629 FileHeader:
630   Class:   ELFCLASS32
631   Data:    ELFDATA2MSB
632   Type:    ET_REL
633   Machine: EM_X86_64
634 Sections:
635   - Name: .stack_sizes
636     Type: SHT_PROGBITS
637     Content: "00"
638   - Name: .rela.stack_sizes
639     Type: SHT_RELA
640     Info: .stack_sizes
641     Relocations:
642       - Offset: 0
643         Type:   R_X86_64_64
645 ## Check we report an error when dumping stack sizes if the relocated section
646 ## identified by the sh_info field is invalid. Here sh_info value is larger than
647 ## the number of sections.
649 # RUN: yaml2obj --docnum=13 %s > %t18
650 # RUN: not llvm-readelf --stack-sizes %t18 2>&1 | FileCheck %s -DFILE=%t18 --check-prefix=INVALID-TARGET
651 # RUN: not llvm-readobj --stack-sizes %t18 2>&1 | FileCheck %s -DFILE=%t18 --check-prefix=INVALID-TARGET
653 # INVALID-TARGET: error: '[[FILE]]': .rela.stack_sizes: failed to get a relocated section: invalid section index: 255
655 --- !ELF
656 FileHeader:
657   Class:   ELFCLASS32
658   Data:    ELFDATA2MSB
659   Type:    ET_REL
660   Machine: EM_X86_64
661 Sections:
662   - Name: .rela.stack_sizes
663     Type: SHT_RELA
664     Link: 0
665     Info: 0xFF
666     Relocations: []