]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.dwarf2/macro-source-path.exp
Update copyright year range in header of all files managed by GDB
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.dwarf2 / macro-source-path.exp
1 # This testcase is part of GDB, the GNU debugger.
2
3 # Copyright 2022-2023 Free Software Foundation, Inc.
4
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 # Generate binaries imitating different ways source file paths can be passed to
19 # compilers. Test printing macros from those binaries.
20
21 load_lib dwarf.exp
22
23 if {![dwarf2_support]} {
24 return 0
25 }
26
27 standard_testfile .c
28
29 lassign [function_range main $srcdir/$subdir/$srcfile] \
30 main_start main_len
31
32 # Run one test.
33 #
34 # - TEST_NAME is the name of the test, used to differentiate the binaries.
35 # - LINES_VERSION is the version of the version of the .debug_line section to
36 # generate.
37 # - DW_AT_NAME is the string to put in the compilation unit's DW_AT_name
38 # attribute.
39 # - MAIN_FILE_IDX is the file index the .debug_line and .debug_macro sections
40 # will use to refer to the main file.
41 # - DIRECTORIES is a list of directories to put in the .debug_line section
42 # header
43 # - FILE_NAMES is a list of {name, directory index} pairs describing the files
44 # names to put in the .debug_line section header.
45
46 proc do_test { test_name lines_version DW_AT_name main_file_idx directories
47 file_names } {
48 with_test_prefix "test_name=$test_name" {
49 foreach_with_prefix is_64 {true false} {
50 # So we can access them in Dwarf::assemble...
51 set ::lines_version $lines_version
52 set ::DW_AT_name $DW_AT_name
53 set ::main_file_idx $main_file_idx
54 set ::directories $directories
55 set ::file_names $file_names
56 set ::is_64 $is_64
57 set 32_or_64 [expr $is_64 ? 64 : 32]
58
59 set asm_file [standard_output_file ${::testfile}-${test_name}-${32_or_64}.S]
60 Dwarf::assemble $asm_file {
61 declare_labels Llines cu_macros
62
63 # DW_AT_comp_dir is always the current working directory
64 # from which the compiler was invoked. We pretend the compiler was
65 # always launched from /tmp/cwd.
66 set comp_dir "/tmp/cwd"
67
68 cu {} {
69 DW_TAG_compile_unit {
70 {DW_AT_producer "My C Compiler"}
71 {DW_AT_language @DW_LANG_C11}
72 {DW_AT_name $::DW_AT_name}
73 {DW_AT_comp_dir $comp_dir}
74 {DW_AT_stmt_list $Llines DW_FORM_sec_offset}
75 {DW_AT_macros $cu_macros DW_FORM_sec_offset}
76 } {
77 declare_labels int_type
78
79 int_type: DW_TAG_base_type {
80 {DW_AT_byte_size 4 DW_FORM_sdata}
81 {DW_AT_encoding @DW_ATE_signed}
82 {DW_AT_name int}
83 }
84
85 DW_TAG_subprogram {
86 {MACRO_AT_func {main}}
87 {type :$int_type}
88 }
89 }
90 }
91
92 # Define the .debug_line section.
93 lines [list version $::lines_version] "Llines" {
94 foreach directory $::directories {
95 include_dir $directory
96 }
97
98 foreach file_name $::file_names {
99 lassign $file_name name dir_index
100 file_name $name $dir_index
101 }
102
103 # A line number program just good enough so that GDB can
104 # figure out we are stopped in main.
105 program {
106 DW_LNS_set_file $::main_file_idx
107 DW_LNE_set_address $::main_start
108 line 10
109 DW_LNS_copy
110
111 DW_LNE_set_address "$::main_start + $::main_len"
112 DW_LNE_end_sequence
113 }
114 }
115
116 # Define the .debug_macro section.
117 macro {
118 cu_macros: unit {
119 "debug-line-offset-label" $Llines
120 "is-64" $::is_64
121 } {
122 # A macro defined outside the main file, as if it was defined
123 # on the command line with -D.
124 #
125 # Clang has this bug where it puts the macros defined on
126 # the command-line after the main file portion (see
127 # PR 29034). We're not trying to replicate that here,
128 # this is not in the scope of this test.
129 define 0 "ONE 1"
130 start_file 0 $::main_file_idx
131 # A macro defined at line 1 of the main file.
132 define 1 "TWO 2"
133 end_file
134 }
135 }
136 }
137
138 if { [prepare_for_testing "failed to prepare" ${::testfile}-${test_name}-${32_or_64} \
139 [list $::srcfile $asm_file] {nodebug}] } {
140 return
141 }
142
143 if ![runto_main] {
144 return
145 }
146
147 gdb_test "print ONE" " = 1"
148 gdb_test "print TWO" " = 2"
149 }
150 }
151 }
152
153 # When adding a test here, please consider adding an equivalent case to the test
154 # of the same name in gdb.base.
155
156 # The following tests are based on the output of `gcc -gdwarf-5 -g3 <file>`,
157 # gcc 11 paired with gas from binutils 2.38.
158
159 ## test.c
160 do_test gcc11-ld238-dw5-filename 5 "test.c" 1 {
161 "/tmp/cwd"
162 } {
163 {"test.c" 0}
164 {"test.c" 0}
165 }
166
167 ## ./test.c
168 do_test gcc11-ld238-dw5-dot-filename 5 "./test.c" 1 {
169 "/tmp/cwd"
170 "."
171 } {
172 {"test.c" 1}
173 {"test.c" 1}
174 }
175
176 ## ../cwd/test.c
177 do_test gcc11-ld238-dw5-dot-dot-cwd 5 "../cwd/test.c" 1 {
178 "/tmp/cwd"
179 "../cwd"
180 } {
181 {"test.c" 1}
182 {"test.c" 1}
183 }
184
185 ## /tmp/cwd/test.c
186 do_test gcc11-ld238-dw5-absolute-cwd 5 "/tmp/cwd/test.c" 1 {
187 "/tmp/cwd"
188 "/tmp/cwd"
189 } {
190 {"test.c" 1}
191 {"test.c" 0}
192 }
193
194 ## ../other/test.c
195 do_test gcc11-ld238-dw5-dot-dot-other 5 "../other/test.c" 1 {
196 "/tmp/cwd"
197 "../other"
198 } {
199 {"test.c" 1}
200 {"test.c" 1}
201 }
202
203 ## /tmp/other/test.c
204 do_test gcc11-ld238-dw5-absolute-other 5 "/tmp/other/test.c" 1 {
205 "/tmp/cwd"
206 "/tmp/other"
207 } {
208 {"test.c" 1}
209 {"test.c" 1}
210 }
211
212 # The following tests are based on the output of `gcc -gdwarf-4 -g3 <file>`,
213 # gcc 11 paired with gas from binutils 2.38. With -gdwarf-4, gcc generates a
214 # v4 (pre-standard) .debug_macro section.
215
216 ## test.c
217 do_test gcc11-ld238-dw4-filename 4 "test.c" 1 {
218 } {
219 {"test.c" 0}
220 }
221
222 ## ./test.c
223 do_test gcc11-ld238-dw4-dot-filename 4 "./test.c" 1 {
224 "."
225 } {
226 {"test.c" 1}
227 }
228
229 ## ../cwd/test.c
230 do_test gcc11-ld238-dw4-dot-dot-cwd 4 "../cwd/test.c" 1 {
231 "../cwd"
232 } {
233 {"test.c" 1}
234 }
235
236 ## /tmp/cwd/test.c
237 do_test gcc11-ld238-dw4-absolute-cwd 4 "/tmp/cwd/test.c" 1 {
238 "/tmp/cwd"
239 } {
240 {"test.c" 1}
241 }
242
243 ## ../other/test.c
244 do_test gcc11-ld238-dw4-dot-dot-other 4 "../other/test.c" 1 {
245 "../other"
246 } {
247 {"test.c" 1}
248 }
249
250 ## /tmp/other/test.c
251 do_test gcc11-ld238-dw4-absolute-other 4 "/tmp/other/test.c" 1 {
252 "/tmp/other"
253 } {
254 {"test.c" 1}
255 }
256
257 # The following tests are based on the output of `clang-14 -gdwarf-5
258 # -fdebug-macro -g3 <file>` (using its built-in assembler)
259
260 ## test.c
261 do_test clang14-dw5-filename 5 "test.c" 0 {
262 "/tmp/cwd"
263 } {
264 {"test.c" 0}
265 }
266
267 ## ./test.c
268 do_test clang14-dw5-dot-filename 5 "test.c" 1 {
269 "/tmp/cwd"
270 "."
271 } {
272 {"test.c" 0}
273 {"test.c" 1}
274 }
275
276 ## ../cwd/test.c
277 do_test clang14-dw5-dot-dot-cwd 5 "../cwd/test.c" 0 {
278 "/tmp/cwd"
279 } {
280 {"../cwd/test.c" 0}
281 }
282
283 ## /tmp/cwd/test.c
284 do_test clang14-dw5-absolute-cwd 5 "/tmp/cwd/test.c" 1 {
285 "/tmp/cwd"
286 } {
287 {"/tmp/cwd/test.c" 0}
288 {"test.c" 0}
289 }
290
291 ## ../other/test.c
292 do_test clang14-dw5-dot-dot-other 5 "../other/test.c" 0 {
293 "/tmp/cwd"
294 } {
295 {"../other/test.c" 0}
296 }
297
298 ## /tmp/other/test.c
299 do_test clang14-dw5-absolute-other 5 "/tmp/other/test.c" 1 {
300 "/tmp/cwd"
301 "/tmp"
302 } {
303 {"/tmp/other/test.c" 0}
304 {"other/test.c" 1}
305 }
306
307 # The following tests are based on the output of `clang-14 -gdwarf-4
308 # -fdebug-macro -g3 <file>` (using its built-in assembler). With -gdwarf-4,
309 # clang produces a .debug_macinfo section, not a .debug_macro section. But
310 # this test still creates a .debug_macro section, that's good enough for what
311 # we want to test.
312
313 ## test.c
314 do_test clang14-dw4-filename 4 "test.c" 1 {
315 } {
316 {"test.c" 0}
317 }
318
319 ## ./test.c
320 do_test clang14-dw4-dot-filename 4 "test.c" 1 {
321 "."
322 } {
323 {"test.c" 1}
324 }
325
326 ## ../cwd/test.c
327 do_test clang14-dw4-dot-dot-cwd 4 "../cwd/test.c" 1 {
328 "../cwd"
329 } {
330 {"test.c" 1}
331 }
332
333 ## /tmp/cwd/test.c
334 do_test clang14-dw4-absolute-cwd 4 "/tmp/cwd/test.c" 1 {
335 } {
336 {"test.c" 0}
337 }
338
339 ## ../other/test.c
340 do_test clang14-dw4-dot-dot-other 4 "../other/test.c" 1 {
341 "../other"
342 } {
343 {"test.c" 1}
344 }
345
346 ## /tmp/other/test.c
347 do_test clang14-dw4-absolute-other 4 "/tmp/other/test.c" 1 {
348 "/tmp"
349 } {
350 {"other/test.c" 1}
351 }
352
353 # The following tests are based on the output of `gcc -gdwarf-5 -g3 <file>`,
354 # gcc 11 paired with gas from binutils 2.34 (Ubuntu 20.04). It generates a v5
355 # .debug_macro section, but a v3 .debug_line section.
356
357 ## test.c
358 do_test gcc11-ld234-dw5-filename 3 "test.c" 1 {
359 } {
360 {"test.c" 0}
361 }
362
363 ## ./test.c
364 do_test gcc11-ld234-dw5-dot-filename 3 "./test.c" 1 {
365 "."
366 } {
367 {"test.c" 1}
368 }
369
370 ## ../cwd/test.c
371 do_test gcc11-ld234-dw5-dot-dot-cwd 3 "../cwd/test.c" 1 {
372 "../cwd"
373 } {
374 {"test.c" 1}
375 }
376
377 ## /tmp/cwd/test.c
378 do_test gcc11-ld234-dw5-absolute-cwd 3 "/tmp/cwd/test.c" 1 {
379 "/tmp/cwd"
380 } {
381 {"test.c" 1}
382 }
383
384 ## ../other/test.c
385 do_test gcc11-ld234-dw5-dot-dot-other 3 "../other/test.c" 1 {
386 "../other"
387 } {
388 {"test.c" 1}
389 }
390
391 ## /tmp/other/test.c
392 do_test gcc11-ld234-dw5-absolute-other 3 "/tmp/other/test.c" 1 {
393 "/tmp/other"
394 } {
395 {"test.c" 1}
396 }