2 # Copyright 2002, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
24 set objfile ${objdir}/${subdir}/${testfile}.o
25 set binfile ${objdir}/${subdir}/${testfile}
27 set options { debug additional_flags=-DFROM_COMMANDLINE=ARG}
29 get_compiler_info ${binfile}
30 if [test_compiler_info gcc*] {
31 lappend options additional_flags=-g3
34 # Generate the intermediate object file. This is required by Darwin to
35 # have access to the .debug_macinfo section.
36 if {[gdb_compile "${srcdir}/${subdir}/macscp1.c" "${objfile}" \
37 object $options] != ""
38 || [gdb_compile "${objfile}" "${binfile}" executable $options] != "" } {
45 gdb_reinitialize_dir $srcdir/$subdir
49 # Ask GDB to show the current definition of MACRO, and return a list
50 # describing the result.
52 # The return value has the form {FILE1 FILE2 ... DEF}, which means
53 # that MACRO has the definition `DEF', and was defined in `FILE1',
54 # which was included from `FILE2', included from ... .
56 # If GDB says that MACRO has no definition, return the string `undefined'.
58 # If GDB complains that it doesn't have any information about
59 # preprocessor macro definitions, return the string `no-macro-info'.
61 # If expect times out waiting for GDB, we return the string `timeout'.
63 # If GDB's output doesn't otherwise match what we're expecting, we
64 # return the empty string.
66 proc info_macro {macro} {
69 set filepat {macscp[0-9]+\.[ch]}
73 # Line number zero is set for macros defined from the compiler command-line.
74 # Such macros are not being tested by this function.
75 set nonzero {[1-9][0-9]*}
77 send_gdb "info macro ${macro}\n"
81 if {$debug_me} {exp_internal 1}
83 -re "Defined at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
84 # `location' and `definition' should be empty when we see
86 if {[llength $location] == 0 && [llength $definition] == 0} {
87 set location $expect_out(1,string)
90 # Exit this expect loop, with a result indicating failure.
94 -re "The symbol `${macro}' has no definition as a C/C\\+\\+ preprocessor macro\[^\r\n\]*\[\r\n\]" {
95 # `location' and `definition' should be empty when we see
97 if {[llength $location] == 0 && [llength $definition] == 0} {
98 set definition undefined
101 # Exit this expect loop, with a result indicating failure.
105 -re "^\[\r\n\]* included at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
106 # `location' should *not* be empty when we see this
107 # message. It should have recorded at least the initial
108 # `Defined at ' message (for definitions) or ` at' message
109 # (for undefined symbols).
110 if {[llength $location] != 0} {
111 lappend location $expect_out(1,string)
114 # Exit this expect loop, with a result indicating failure.
118 -re "^\[\r\n\]*at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
119 # This appears after a `has no definition' message.
120 # `location' should be empty when we see it.
121 if {[string compare $definition undefined] == 0 \
122 && [llength $location] == 0} {
123 set location $expect_out(1,string)
126 # Exit this expect loop, with a result indicating failure.
130 -re "#define ${macro} (\[^\r\n\]*)\[\r\n\]" {
131 # `definition' should be empty when we see this message.
132 if {[string compare $definition ""] == 0} {
133 set definition $expect_out(1,string)
136 # Exit this expect loop, with a result indicating failure.
140 -re "has no preprocessor macro information.*$gdb_prompt $" {
141 set definition no-macro-info
143 -re "$gdb_prompt $" {
144 # Exit the expect loop; let the existing value of `definition'
145 # indicate failure or success.
148 set definition timeout
151 if {$debug_me} {exp_internal 0}
153 switch -exact -- $definition {
154 no-macro-info { return no-macro-info }
155 timeout { return timeout }
156 undefined { return undefined }
158 if {[llength $location] >= 1} {
159 return [concat $location [list $definition]]
168 # Call info_macro to show the definition of MACRO. Expect a result of
169 # EXPECTED. Use WHERE in pass/fail messages to identify the context.
170 # Return non-zero if we should abort the entire test file, or zero if
172 proc check_macro {macro expected where} {
173 set func_def [info_macro $macro]
174 if {[string compare $func_def $expected] == 0} {
175 pass "info macro $macro $where"
177 switch -exact -- $func_def {
179 xfail "executable includes no macro debugging information"
183 fail "info macro $macro $where (undefined)"
187 fail "info macro $macro $where (timeout)"
190 fail "info macro $macro $where"
198 # List the function FUNC, and then show the definition of MACRO,
199 # expecting the result EXPECTED.
200 proc list_and_check_macro {func macro expected} {
201 gdb_test "list $func" ".*${func}.*" "list $func for $macro"
202 return [check_macro $macro $expected "after `list $func'"]
205 gdb_test "list main" ".*main.*" "list main for support check"
206 set macro_support "unknown"
207 gdb_test_multiple "info source" "Test macro information" {
208 -re "Includes preprocessor macro info\..*$gdb_prompt $" {
210 verbose "Source has macro information"
212 -re "Does not include preprocessor macro info\..*$gdb_prompt $" {
214 verbose "Source has no macro information"
217 warning "couldn't check macro support (no valid response)."
220 if {$macro_support == 0} {
221 unsupported "Skipping test because debug information does not include macro information."
225 list_and_check_macro main WHERE {macscp1.c {before macscp1_3}}
226 list_and_check_macro macscp2_2 WHERE {macscp2.h macscp1.c {before macscp2_2}}
227 list_and_check_macro macscp3_2 WHERE {macscp3.h macscp1.c {before macscp3_2}}
230 # Assuming the current position inside program by `list' from above.
231 gdb_test "info macro FROM_COMMANDLINE" \
232 "Defined at \[^\r\n\]*:0\r\n-DFROM_COMMANDLINE=ARG"
235 # Although GDB's macro table structures distinguish between multiple
236 # #inclusions of the same file, GDB's other structures don't. So the
237 # `list' command here doesn't reliably select one #inclusion or the
238 # other, even though it could. It would be nice to eventually change
239 # GDB's structures to handle this correctly.
240 gdb_test "list macscp4_2_from_macscp2" ".*macscp4_2_, MACSCP4_INCLUSION.*"
241 switch -exact -- [info_macro WHERE] {
242 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}} {
243 pass "info macro WHERE after `list macscp_4_2_from_macscp2'"
245 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}} {
246 setup_kfail "gdb/555" *-*-*
247 fail "info macro WHERE after `list macscp_4_2_from_macscp2' (gdb/555)"
250 fail "info macro WHERE after `list macscp_4_2_from_macscp2' (timeout)"
252 default { fail "info macro WHERE after `list macscp_4_2_from_macscp2'" }
255 gdb_test "list macscp4_2_from_macscp3" ".*macscp4_2_, MACSCP4_INCLUSION.*"
256 switch -exact -- [info_macro WHERE] {
257 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}} {
258 pass "info macro WHERE after `list macscp_4_2_from_macscp3'"
260 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}} {
261 setup_kfail "gdb/555" *-*-*
262 fail "info macro WHERE after `list macscp_4_2_from_macscp3' (gdb/555)"
265 fail "info macro WHERE after `list macscp_4_2_from_macscp3' (timeout)"
267 default { fail "info macro WHERE after `list macscp_4_2_from_macscp3'" }
271 #### Test the selection of the macro scope by the current frame.
273 ### A table of functions, in the order they will be reached, which is
274 ### also the order they appear in the preprocessed output. Each entry
275 ### has the form {FUNCNAME WHERE KFAILWHERE}, where:
276 ### - FUNCNAME is the name of the function,
277 ### - WHERE is the definition we expect to see for the macro `WHERE', as
278 ### returned by `info_macro', and
279 ### - KFAILWHERE is an alternate definition which should be reported
280 ### as a `known failure', due to GDB's inability to distinguish multiple
281 ### #inclusions of the same file.
282 ### KFAILWHERE may be omitted.
287 {macscp1.c {before macscp1_1}}
291 {macscp2.h macscp1.c {before macscp2_1}}
294 macscp4_1_from_macscp2
295 {macscp4.h macscp2.h macscp1.c {before macscp4_1_..., from macscp2.h}}
296 {macscp4.h macscp3.h macscp1.c {before macscp4_1_..., from macscp3.h}}
299 macscp4_2_from_macscp2
300 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}}
301 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}}
305 {macscp2.h macscp1.c {before macscp2_2}}
309 {macscp1.c {before macscp1_2}}
313 {macscp3.h macscp1.c {before macscp3_1}}
316 macscp4_1_from_macscp3
317 {macscp4.h macscp3.h macscp1.c {before macscp4_1_..., from macscp3.h}}
318 {macscp4.h macscp2.h macscp1.c {before macscp4_1_..., from macscp2.h}}
321 macscp4_2_from_macscp3
322 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}}
323 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}}
327 {macscp3.h macscp1.c {before macscp3_2}}
331 {macscp1.c {before macscp1_3}}
335 proc maybe_kfail { func test_name } {
336 # We can't get the right scope info when we're stopped in
337 # the macro4_ functions.
338 if {[string match macscp4_* $func]} {
339 kfail gdb/555 "$test_name"
345 # Start the program running.
346 if {! [runto_main]} {
347 fail "macro tests suppressed: couldn't run to main"
351 # Set a breakpoint on each of the functions.
352 foreach func_entry $funcs {
353 set func [lindex $func_entry 0]
354 gdb_test "break $func" "Breakpoint.*"
357 # Run to each of the breakpoints and check the definition (or lack
358 # thereof) of each macro.
359 for {set i 0} {$i < [llength $funcs]} {incr i} {
360 set func_entry [lindex $funcs $i]
361 set func [lindex $func_entry 0]
362 set expected [lindex $func_entry 1]
363 set kfail_expected [lindex $func_entry 2]
365 # Run to the breakpoint for $func.
366 gdb_test "continue" "Breakpoint $decimal, $func .*" "continue to $func"
368 # Check the macro WHERE.
369 set result [info_macro WHERE]
370 if {[string compare $result $expected] == 0} {
371 pass "info macro WHERE stopped in $func"
372 } elseif {[string compare $result $kfail_expected] == 0} {
373 setup_kfail "gdb/555" *-*-*
374 fail "info macro WHERE stopped in $func (gdb/555)"
375 } elseif {[string compare $result timeout] == 0} {
376 fail "info macro WHERE stopped in $func (timeout)"
378 fail "info macro WHERE stopped in $func"
381 # Check that the BEFORE_<func> macros for all prior functions are
382 # #defined, and that those for all subsequent functions are not.
383 for {set j 0} {$j < [llength $funcs]} {incr j} {
385 set func_j_entry [lindex $funcs $j]
386 set func_j [lindex $func_j_entry 0]
388 set before_macro "BEFORE_[string toupper $func_j]"
390 "$before_macro defined/undefined when stopped at $func"
391 set result [info_macro $before_macro]
394 if {[llength $result] >= 2 && \
395 [string compare [lindex $result end] {}] == 0} {
397 } elseif {[string compare $result timeout] == 0} {
398 fail "$test_name (timeout)"
400 maybe_kfail $func "$test_name"
403 switch -- [lindex $result end] {
404 undefined { pass $test_name }
405 timeout { fail "$test_name (timeout)" }
407 maybe_kfail $func "$test_name"
412 set until_macro "UNTIL_[string toupper $func_j]"
414 "$until_macro defined/undefined when stopped at $func"
415 set result [info_macro $until_macro]
418 switch -- [lindex $result end] {
419 undefined { pass $test_name }
420 timeout { fail "$test_name (timeout)" }
422 maybe_kfail $func "$test_name"
426 if {[llength $result] >= 2 && \
427 [string compare [lindex $result end] {}] == 0} {
429 } elseif {[string compare $result timeout] == 0} {
430 fail "$test_name (timeout)"
432 maybe_kfail $func "$test_name"
439 gdb_test "break [gdb_get_line_number "set breakpoint here"]" \
440 "Breakpoint.*at.* file .*, line.*" \
441 "breakpoint macscp_expr"
443 gdb_test "continue" "foo = 0;.*" "continue to macsp_expr"
445 gdb_test "print address.addr" \
449 gdb_test "print MACRO_TO_EXPAND" \
450 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
451 "print expression with macro before define."
453 gdb_test "next" "foo = 1;" "next to definition 1"
455 gdb_test "print MACRO_TO_EXPAND" \
457 "print expression with macro in scope."
459 gdb_test_no_output "macro define MACRO_TO_EXPAND 72" \
460 "user macro override"
462 gdb_test "print MACRO_TO_EXPAND" \
466 gdb_test_no_output "macro undef MACRO_TO_EXPAND" \
467 "remove user override"
469 gdb_test "print MACRO_TO_EXPAND" \
471 "print expression with macro after removing override"
473 gdb_test "next" "foo = 2;" "next to definition 2"
475 gdb_test "print MACRO_TO_EXPAND" \
476 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
477 "print expression with macro after undef."
479 gdb_test_no_output "macro define MACRO_TO_EXPAND 5" \
482 gdb_test "print MACRO_TO_EXPAND" \
484 "expansion of defined macro"
486 gdb_test "macro list" \
487 "macro define MACRO_TO_EXPAND 5" \
490 gdb_test_no_output "macro define MACRO_TO_EXPAND(x) x" \
491 "basic redefine, macro with args"
493 gdb_test "print MACRO_TO_EXPAND (7)" \
495 "expansion of macro with arguments"
497 gdb_test_no_output "macro undef MACRO_TO_EXPAND" \
500 gdb_test "print MACRO_TO_EXPAND" \
501 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
502 "print expression with macro after user undef."
504 # Regression test; this used to crash.
505 gdb_test "macro define" \
506 "usage: macro define.*" \
507 "macro define with no arguments"
509 # Regression test; this used to crash.
510 gdb_test "macro undef" \
511 "usage: macro undef.*" \
512 "macro undef with no arguments"
516 # The macro FIFTY_SEVEN is in scope at this point.
517 send_gdb "p FIFTY_\t"
519 -re "^p FIFTY_SEVEN $"\
522 -re "^.* = 57.*$gdb_prompt $"\
523 { pass "complete 'p FIFTY_SEVEN'"}
524 -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'"}
525 timeout {fail "(timeout) complete 'p FIFTY_SEVEN'"}
528 -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
529 timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" }
532 # The macro TWENTY_THREE is not in scope.
533 send_gdb "p TWENTY_\t"
535 -re "^p TWENTY_\\\x07$"\
538 -re "No symbol \"TWENTY_\" in current context\\..*$gdb_prompt $"\
539 { pass "complete 'p TWENTY_'"}
540 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'"}
541 timeout {fail "(timeout) complete 'p TWENTY_'"}
544 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
545 timeout { fail "(timeout) complete 'p TWENTY_' 2" }
548 # The macro FORTY_EIGHT was undefined and thus is not in scope.
549 send_gdb "p FORTY_\t"
551 -re "^p FORTY_\\\x07$"\
554 -re "No symbol \"FORTY_\" in current context\\..*$gdb_prompt $"\
555 { pass "complete 'p FORTY_'"}
556 -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'"}
557 timeout {fail "(timeout) complete 'p FORTY_'"}
560 -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
561 timeout { fail "(timeout) complete 'p FORTY_' 2" }
564 gdb_test_no_output "macro define TWENTY_THREE 25" \
565 "defining TWENTY_THREE"
567 # User-defined macros are always in scope.
568 send_gdb "p TWENTY_\t"
570 -re "^p TWENTY_THREE $"\
573 -re "^.* = 25.*$gdb_prompt $"\
574 { pass "complete 'p TWENTY_THREE'"}
575 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'"}
576 timeout {fail "(timeout) complete 'p TWENTY_THREE'"}
579 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" }
580 timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" }
585 gdb_test "macro expand SPLICE(x, y)" \
587 "basic macro splicing"
589 gdb_test_no_output "macro define robotinvasion 2010" \
590 "define splice helper"
592 gdb_test "macro expand SPLICE(robot, invasion)" \
593 "expands to: *2010" \
594 "splicing plus expansion"
598 gdb_test_no_output "macro define va_c99(...) varfunc (fixedarg, __VA_ARGS__)" \
599 "define first varargs helper"
601 gdb_test_no_output "macro define va2_c99(x, y, ...) varfunc (fixedarg, x, y, __VA_ARGS__)" \
602 "define second varargs helper"
604 gdb_test_no_output "macro define va_gnu(args...) varfunc (fixedarg, args)" \
605 "define third varargs helper"
607 gdb_test_no_output "macro define va2_gnu(args...) varfunc (fixedarg, ## args)" \
608 "define fourth varargs helper"
610 gdb_test "macro expand va_c99(one, two, three)" \
611 "expands to: *varfunc \\(fixedarg, *one, two, three\\)" \
612 "c99 varargs expansion"
614 gdb_test "macro expand va_c99()" \
615 "expands to: *varfunc \\(fixedarg, *\\)" \
616 "c99 varargs expansion without an argument"
618 gdb_test "macro expand va2_c99(one, two, three, four)" \
619 "expands to: *varfunc \\(fixedarg, *one, two, three, four\\)" \
620 "c99 varargs expansion, multiple formal arguments"
622 gdb_test "macro expand va_gnu(one, two, three, four)" \
623 "expands to: *varfunc \\(fixedarg, *one, two, three, four\\)" \
624 "gnu varargs expansion"
626 gdb_test "macro expand va_gnu()" \
627 "expands to: *varfunc \\(fixedarg, *\\)" \
628 "gnu varargs expansion without an argument"
630 gdb_test "macro expand va2_gnu()" \
631 "expands to: *varfunc \\(fixedarg\\)" \
632 "gnu varargs expansion special splicing without an argument"
634 # Stringification tests.
636 gdb_test_no_output "macro define str(x) #x" \
637 "define stringification macro"
639 gdb_test_no_output "macro define maude 5" \
640 "define first stringification helper"
642 gdb_test_no_output "macro define xstr(x) str(x)" \
643 "define second stringification helper"
645 gdb_test "print str(5)" \
649 gdb_test "print str(hi bob)" \
651 "stringify with one space"
653 gdb_test "print str( hi bob )" \
655 "stringify with many spaces"
657 gdb_test "print str(hi \"bob\")" \
658 " = \"hi \\\\\"bob\\\\\"\"" \
659 "stringify with quotes"
661 gdb_test "print str(hi \\bob\\)" \
662 " = \"hi \\\\\\\\bob\\\\\\\\\"" \
663 "stringify with backslashes"
665 gdb_test "print str(maude)" \
667 "stringify without substitution"
669 gdb_test "print xstr(maude)" \
671 "stringify with substitution"
673 # Regression test for pp-number bug.
674 gdb_test_no_output "macro define si_addr fields.fault.si_addr" \
675 "define si_addr macro"
677 gdb_test "macro expand siginfo.si_addr" \
678 "expands to: siginfo.fields.fault.si_addr" \
679 "macro expand siginfo.si_addr"