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