1## Test various details of llvm-objdump -h (--section-headers).
2
3## Check leading and trailing whitespace for full lines.
4
5# RUN: yaml2obj %s --docnum=1 -o %t-whitespace.o
6# RUN: llvm-objdump -h --show-lma %t-whitespace.o \
7# RUN:   | FileCheck %s --check-prefix=WHITESPACE --strict-whitespace
8# RUN: llvm-objdump -h %t-whitespace.o \
9# RUN:   | FileCheck %s --check-prefix=WHITESPACE-NO-LMA --strict-whitespace
10
11# WHITESPACE:      {{^}}Sections:{{$}}
12# WHITESPACE-NEXT: {{^}}Idx Name          Size     VMA              LMA              Type{{$}}
13# WHITESPACE-NEXT: {{^}}  0               00000000 0000000000000000 0000000000000000 {{$}}
14# WHITESPACE-NEXT: {{^}}  1 .text         00000000 0000000000000000 0000000000000000 TEXT{{$}}
15# WHITESPACE-NEXT: {{^}}  2 .data         00000000 0000000000000000 0000000000000000 DATA{{$}}
16# WHITESPACE-NEXT: {{^}}  3 .bss          00000000 0000000000000000 0000000000000000 BSS{{$}}
17# WHITESPACE-NEXT: {{^}}  4 .other        00000000 0000000000000000 0000000000000000 {{$}}
18
19# WHITESPACE-NO-LMA:      {{^}}Sections:{{$}}
20# WHITESPACE-NO-LMA-NEXT: {{^}}Idx Name          Size     VMA              Type{{$}}
21# WHITESPACE-NO-LMA-NEXT: {{^}}  0               00000000 0000000000000000 {{$}}
22# WHITESPACE-NO-LMA-NEXT: {{^}}  1 .text         00000000 0000000000000000 TEXT{{$}}
23# WHITESPACE-NO-LMA-NEXT: {{^}}  2 .data         00000000 0000000000000000 DATA{{$}}
24# WHITESPACE-NO-LMA-NEXT: {{^}}  3 .bss          00000000 0000000000000000 BSS{{$}}
25# WHITESPACE-NO-LMA-NEXT: {{^}}  4 .other        00000000 0000000000000000 {{$}}
26
27--- !ELF
28FileHeader:
29  Class:   ELFCLASS64
30  Data:    ELFDATA2LSB
31  Type:    ET_EXEC
32  Machine: EM_X86_64
33Sections:
34  - Name:  .text
35    Type:  SHT_PROGBITS
36    Flags: [SHF_ALLOC, SHF_EXECINSTR]
37  - Name:  .data
38    Type:  SHT_PROGBITS
39    Flags: [SHF_ALLOC, SHF_WRITE]
40  - Name:  .bss
41    Type:  SHT_NOBITS
42    Flags: [SHF_ALLOC, SHF_WRITE]
43  - Name:  .other
44    Type:  SHT_REL
45
46## The name field automatically expands past the default 13 columns when a
47## section name is longer than that.
48## Note: check with and without --show-lma to make sure resizing happens in
49## both cases.
50
51# RUN: yaml2obj %s --docnum=2 -o %t-name13chars.o
52# RUN: llvm-objdump -h --show-lma %t-name13chars.o \
53# RUN:   | FileCheck %s --check-prefix=NAME-13 --strict-whitespace
54# RUN: llvm-objdump -h %t-name13chars.o \
55# RUN:   | FileCheck %s --check-prefix=NAME-13 --strict-whitespace
56
57# NAME-13:      Sections:
58# NAME-13-NEXT: {{^}}Idx Name          Size
59# NAME-13-NEXT: {{^}}  0               00000000
60# NAME-13-NEXT: {{^}}  1 .foo          00000000
61# NAME-13-NEXT: {{^}}  2 .thirteenchar 00000000
62# NAME-13-NEXT: {{^}}  3 .bar          00000000
63
64## Including a section with a name of length 14 expands the width of the "Name"
65## column.
66# RUN: yaml2obj %s --docnum=3 -o %t-name14chars.o
67# RUN: llvm-objdump -h --show-lma %t-name14chars.o \
68# RUN:   | FileCheck %s --check-prefix=NAME-14 --strict-whitespace
69# RUN: llvm-objdump -h %t-name14chars.o \
70# RUN:   | FileCheck %s --check-prefix=NAME-14 --strict-whitespace
71
72# NAME-14:      Sections:
73# NAME-14-NEXT: {{^}}Idx Name           Size
74# NAME-14-NEXT: {{^}}  0                00000000
75# NAME-14-NEXT: {{^}}  1 .foo           00000000
76# NAME-14-NEXT: {{^}}  2 .fourteenchars 00000000
77# NAME-14-NEXT: {{^}}  3 .bar           00000000
78
79--- !ELF
80FileHeader:
81  Class:   ELFCLASS64
82  Data:    ELFDATA2LSB
83  Type:    ET_EXEC
84  Machine: EM_X86_64
85Sections:
86  - Name: .foo
87    Type: SHT_PROGBITS
88  - Name: .thirteenchar
89    Type: SHT_PROGBITS
90  - Name: .bar
91    Type: SHT_PROGBITS
92
93--- !ELF
94FileHeader:
95  Class:   ELFCLASS64
96  Data:    ELFDATA2LSB
97  Type:    ET_EXEC
98  Machine: EM_X86_64
99Sections:
100  - Name: .foo
101    Type: SHT_PROGBITS
102  - Name: .fourteenchars
103    Type: SHT_PROGBITS
104  - Name: .bar
105    Type: SHT_PROGBITS
106
107## Check that objdump -h only prints the necessary amount of bytes for
108## addresses.
109
110# RUN: yaml2obj %s --docnum=4 -o %t-32bit.o
111# RUN: yaml2obj %s --docnum=5 -o %t-64bit.o
112
113# RUN: llvm-objdump -h --show-lma %t-32bit.o \
114# RUN:   | FileCheck %s --check-prefix=32 --strict-whitespace
115# 32: {{^}}Idx Name          Size     VMA      LMA      Type{{$}}
116# 32: {{^}}  1 .foo          00000000 00000400 00000400 TEXT{{$}}
117
118# RUN: llvm-objdump -h %t-32bit.o \
119# RUN:   | FileCheck %s --check-prefix=32-NO-LMA --strict-whitespace
120# 32-NO-LMA: {{^}}Idx Name          Size     VMA      Type{{$}}
121# 32-NO-LMA: {{^}}  1 .foo          00000000 00000400 TEXT{{$}}
122
123# RUN: llvm-objdump -h --show-lma %t-64bit.o \
124# RUN:   | FileCheck %s --check-prefix=64 --strict-whitespace
125# 64: {{^}}Idx Name          Size     VMA              LMA              Type{{$}}
126# 64: {{^}}  1 .foo          00000000 0000000000000400 0000000000000400 TEXT{{$}}
127
128# RUN: llvm-objdump -h %t-64bit.o \
129# RUN:   | FileCheck %s --check-prefix=64-NO-LMA --strict-whitespace
130# 64-NO-LMA: {{^}}Idx Name          Size     VMA              Type{{$}}
131# 64-NO-LMA: {{^}}  1 .foo          00000000 0000000000000400 TEXT{{$}}
132
133--- !ELF
134FileHeader:
135  Class:   ELFCLASS32
136  Data:    ELFDATA2LSB
137  Type:    ET_EXEC
138  Machine: EM_386
139Sections:
140  - Name:    .foo
141    Type:    SHT_PROGBITS
142    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
143    Address: 0x400
144
145--- !ELF
146FileHeader:
147  Class:   ELFCLASS64
148  Data:    ELFDATA2LSB
149  Type:    ET_EXEC
150  Machine: EM_X86_64
151Sections:
152  - Name:    .foo
153    Type:    SHT_PROGBITS
154    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
155    Address: 0x400
156