[llvm-objdump] - Cleanup the error reporting.
[llvm-complete.git] / test / tools / llvm-objdump / warn-on-out-of-range-start-stop-address.test
blob29912aee095ed7ee97814965fc9ee72d9befe8e8
1 ## This test checks warning messages if --start-address/--stop-address
2 ## do not intersect with address ranges of sections that have the SHF_ALLOC
3 ## flag.
5 # RUN: yaml2obj --docnum=1 %s > %t
6 # RUN: yaml2obj --docnum=2 %s > %t.2
7 # RUN: yaml2obj --docnum=3 %s > %t.o
8 # RUN: yaml2obj --docnum=4 %s > %t.3
10 ## Warn if no section covers any part of the specified range.
12 ## - Section ends at start of range:
13 ##           | range |
14 ## | section |
15 # RUN: llvm-objdump --file-headers --start-address=0x1004 --stop-address=0x1006 %t 2>&1 \
16 # RUN:   | FileCheck %s --check-prefix=WARN
18 ## - Range is between two sections:
19 ##             | range |
20 ## | section |           | section |
21 # RUN: llvm-objdump --file-headers --start-address=0x1005 --stop-address=0x1006 %t 2>&1 \
22 # RUN:   | FileCheck %s --check-prefix=WARN
24 ## - Range appears after any section:
25 ##                  | range |
26 ## | section |
27 # RUN: llvm-objdump --file-headers --start-address=0x1405 --stop-address=0x1406 %t 2>&1 \
28 # RUN:   | FileCheck %s --check-prefix=WARN
30 ## - Range starts at 0. (--start-address defaults to 0).
31 # RUN: llvm-objdump --file-headers --stop-address=0x1000 %t 2>&1 \
32 # RUN:   | FileCheck %s --check-prefix=WARN-STOP-ONLY
34 ## - Range ends at UINT64_MAX. (--stop-address defaults to UINT64_MAX)
35 # RUN: llvm-objdump --file-headers --start-address=0x1500 %t 2>&1 \
36 # RUN:   | FileCheck %s --check-prefix=WARN-START-ONLY
38 ## No warning if a section covers at least part of the specified range.
40 ## - Ranges are identical:
41 ## | range   |
42 ## | section |
43 # RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1004 %t 2>&1 \
44 # RUN:   | FileCheck %s --implicit-check-not=warning:
46 ## - Range is entirely within section:
47 ##  | range |
48 ## | section |
49 # RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1003 %t 2>&1 \
50 # RUN:   | FileCheck %s --implicit-check-not=warning:
52 ## - Section is entirely within range:
53 ## |   range   |
54 ##  | section |
55 # RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1005 %t 2>&1 \
56 # RUN:   | FileCheck %s --implicit-check-not=warning:
58 ## - Section and range share same start, section larger:
59 ## | range |
60 ## | section |
61 # RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1003 %t 2>&1 \
62 # RUN:   | FileCheck %s --implicit-check-not=warning:
64 ## - Section and range share same start, range larger:
65 ## | range        |
66 ## | section |
67 # RUN: llvm-objdump --file-headers --start-address=0x1000 --stop-address=0x1005 %t 2>&1 \
68 # RUN:   | FileCheck %s --implicit-check-not=warning:
70 ## - Section and range share same end, section larger:
71 ##   | range |
72 ## | section |
73 # RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1004 %t 2>&1 \
74 # RUN:   | FileCheck %s --implicit-check-not=warning:
76 ## - Section and range share same end, range larger:
77 ## | range    |
78 ##  | section |
79 # RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1004 %t 2>&1 \
80 # RUN:   | FileCheck %s --implicit-check-not=warning:
82 ## - Section and range partially overlap, range first:
83 ## | range |
84 ##   | section |
85 # RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1003 %t 2>&1 \
86 # RUN:   | FileCheck %s --implicit-check-not=warning:
88 ## - Section and range partially overlap, section first:
89 ##       | range |
90 ## | section |
91 # RUN: llvm-objdump --file-headers --start-address=0x1001 --stop-address=0x1005 %t 2>&1 \
92 # RUN:   | FileCheck %s --implicit-check-not=warning:
94 ## - Range starts before first section and ends after second:
95 ## |            range               |
96 ##   | section |    | section |
97 # RUN: llvm-objdump --file-headers --start-address=0xfff --stop-address=0x1405 %t 2>&1 \
98 # RUN:   | FileCheck %s --implicit-check-not=warning:
100 ## Warn only for the input file that does not have the specified range.
101 # RUN: llvm-objdump --file-headers --start-address=0x2001 --stop-address=0x2005 %t %t.2 2>&1 \
102 # RUN:   | FileCheck %s --check-prefix=MULTI-INPUT
104 ## Warn if the specified range is in a segment but not in any section.
105 # RUN: llvm-objdump --file-headers --start-address=0x1008 --stop-address=0x1009 %t 2>&1 \
106 # RUN:   | FileCheck %s --check-prefix=WARN
108 ## Warning for --start-address/--stop-address works regardless of the other options used including --section.
109 # RUN: llvm-objdump --syms --section=.text2 --start-address=0x1004 --stop-address=0x1005 %t 2>&1 \
110 # RUN:   | FileCheck %s --check-prefix=WARN
112 ## Sections without the SHF_ALLOC flag are ignored in address range calculation.
113 # RUN: llvm-objdump --file-headers --start-address=0x1 --stop-address=0x3 %t.3 2>&1 \
114 # RUN:   | FileCheck %s --check-prefix=WARN
116 ## No warning for relocatable objects.
117 # RUN: llvm-objdump --file-headers --start-address=0x1004 --stop-address=0x1005 %t.o 2>&1 \
118 # RUN:   | FileCheck %s --implicit-check-not=warning:
120 ## No warning if neither --start-address nor --stop-address are specified.
121 # RUN: llvm-objdump --file-headers %t 2>&1 | FileCheck %s --implicit-check-not=warning:
123 # WARN: warning: {{.*}}: no section overlaps the range {{.*}} specified by --start-address/--stop-address
124 # WARN-STOP-ONLY: warning: {{.*}}: no section has address less than 0x1000 specified by --stop-address
125 # WARN-START-ONLY: warning: {{.*}}: no section has address greater than or equal to 0x1500 specified by --start-address
127 # MULTI-INPUT: file format
128 # MULTI-INPUT: warning: {{.*}}: no section overlaps the range [0x2001,0x2005) specified by --start-address/--stop-address
129 # MULTI-INPUT: file format
130 # MULTI-INPUT-NOT: warning:
132 --- !ELF
133 FileHeader:
134   Class:   ELFCLASS64
135   Data:    ELFDATA2LSB
136   Type:    ET_EXEC
137   Machine: EM_X86_64
138 Sections:
139   - Name:    .text
140     Type:    SHT_PROGBITS
141     Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
142     Address: 0x1000
143     Size:    4
144   - Name:    .text2
145     Type:    SHT_PROGBITS
146     Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
147     Address: 0x1400
148     Size:    4
149 ProgramHeaders:
150   - Type:     PT_LOAD
151     Flags:    [ PF_X, PF_R ]
152     VAddr:    0x1000
153     FileSize: 0x500
154     Sections:
155       - Section: .text
156       - Section: .text2
158 --- !ELF
159 FileHeader:
160   Class:   ELFCLASS64
161   Data:    ELFDATA2LSB
162   Type:    ET_DYN
163   Machine: EM_X86_64
164 Sections:
165   - Name:    .text
166     Type:    SHT_PROGBITS
167     Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
168     Address: 0x2000
169     Size:    4
170 ProgramHeaders:
171   - Type:     PT_LOAD
172     Flags:    [ PF_X, PF_R ]
173     VAddr:    0x1000
174     FileSize: 0x4
175     Sections:
176       - Section: .text
178 --- !ELF
179 FileHeader:
180   Class:   ELFCLASS64
181   Data:    ELFDATA2LSB
182   Type:    ET_REL
183   Machine: EM_X86_64
184 Sections:
185   - Name:    .text
186     Type:    SHT_PROGBITS
187     Flags:   [ SHF_ALLOC, SHF_EXECINSTR ]
188     Address: 0x1000
189     Size:    4
191 --- !ELF
192 FileHeader:
193   Class:   ELFCLASS64
194   Data:    ELFDATA2LSB
195   Type:    ET_DYN
196   Machine: EM_X86_64
197 Sections:
198   - Name:    .non.alloc
199     Type:    SHT_PROGBITS
200     Size:    2