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