| # Copyright 2011-2020 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program. If not, see <http://www.gnu.org/licenses/>. |
| |
| standard_testfile .c |
| |
| # Fission doesn't support macros yet. Bug 15954. |
| if [using_fission] { |
| untested "fission does not support macros yet" |
| return -1 |
| } |
| |
| get_compiler_info |
| if ![test_compiler_info gcc*] { |
| untested "no compiler info" |
| return -1 |
| } |
| |
| # Don't use "debug" here. Otherwise "-g" would be appended to the gcc |
| # command line, possibly overriding "-g3" (depending on gcc version). |
| set options "additional_flags=-g3" |
| |
| if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } { |
| return -1 |
| } |
| |
| if ![runto_main] { |
| untested "could not run to main" |
| return -1 |
| } |
| |
| # Test various error messages. |
| gdb_test "info macro -- -all" \ |
| "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" |
| gdb_test "info macro -- -all" \ |
| "The symbol `-all' has no definition .*\r\nat .*$srcfile:\[0-9\]+" |
| |
| gdb_test "info macro -all --" \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| |
| gdb_test "info macro -all --" \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| |
| gdb_test "info macro -all --" \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| |
| gdb_test "info macro --" \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| |
| gdb_test "info macro -- " \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| gdb_test "info macro -- " \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" |
| |
| gdb_test "info macro -invalid-option" \ |
| "Unrecognized option.*Try \"help info macro\"\." |
| |
| gdb_test "info macro -invalid-option" \ |
| "Unrecognized option.*Try \"help info macro\"\." |
| |
| gdb_test "info macro -invalid-option FOO" \ |
| "Unrecognized option.*Try \"help info macro\"\." |
| gdb_test "info macro -invalid-option FOO" \ |
| "Unrecognized option.*Try \"help info macro\"\." |
| |
| # Single macro lookups. |
| gdb_test "info macro -- FOO" \ |
| ".*#define FOO \"hello\"" |
| |
| gdb_test "info macro -- FOO" \ |
| ".*#define FOO \"hello\"" |
| |
| gdb_test "info macro -- FOO" \ |
| ".*#define FOO \"hello\"" |
| |
| gdb_test "info macro FOO" \ |
| ".*#define FOO \"hello\"" |
| |
| gdb_test "info macro FOO" \ |
| ".*#define FOO \"hello\"" |
| |
| # Multiple macro lookups. |
| set test "info macro -a FOO" |
| set r1 ".*#define FOO \"hello\"" |
| set r2 ".*#define FOO \" \"" |
| set r3 ".*#define FOO \"world\"" |
| set r4 ".*#define FOO\\(a\\) foo = a" |
| set testname "$test 1" |
| gdb_test "$test" "$r1$r2$r3$r4" "$testname" |
| |
| set test "info macro -a -- FOO" |
| set testname "$test 1" |
| gdb_test "$test" "$r1$r2$r3$r4" "$testname" |
| |
| set test "info macro -all -- FOO" |
| set testname "$test 1" |
| gdb_test "$test" "$r1$r2$r3$r4" "$testname" |
| |
| set test "info macro -a -- FOO" |
| gdb_test "$test" "$r1$r2$r3$r4" |
| |
| set test "info macro -a -- FOO" |
| gdb_test "$test" "$r1$r2$r3$r4" |
| |
| proc gdb_test_multiple_with_read1_timeout_factor { factor command message \ |
| user_code } { |
| with_read1_timeout_factor $factor { |
| uplevel [list gdb_test_multiple $command $message $user_code] |
| } |
| } |
| |
| set test "info macros" |
| set r1 ".*#define FOO \"hello\"" |
| set r2 ".*#define ONE" |
| set r3 ".*\r\n$gdb_prompt" |
| set testname "$test 2" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { |
| -re "$r1$r2$r3" { |
| pass $testname |
| } |
| -re ".*#define TWO.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define THREE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| } |
| gdb_test "next" ".*" "" |
| |
| set r1 ".*#define FOO \" \"" |
| set r2 ".*#define ONE" |
| set r3 ".*#define TWO" |
| set r4 ".*\r\n$gdb_prompt" |
| set testname "$test 3" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { |
| -re ".*#define THREE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re "$r1$r2$r3$r4" { |
| pass $testname |
| } |
| } |
| gdb_test "next" ".*" "" |
| |
| # in alpabetical order... |
| set r1 ".*#define FOO \"world\"" |
| set r2 ".*#define ONE" |
| set r3 ".*#define THREE" |
| set r4 ".*#define TWO" |
| set r5 ".*\r\n$gdb_prompt" |
| set testname "$test 4" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re "$r1$r2$r3$r4$r5" { |
| pass $testname |
| } |
| } |
| # same as above with a linespec. |
| set test "info macros *\$pc" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $test { |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $test |
| } |
| -re "$r1$r2$r3$r4$r5" { |
| pass $test |
| } |
| } |
| gdb_test "next" ".*" "" |
| |
| set r1 ".*#define FOO \" \"" |
| set r2 ".*#define ONE" |
| set r3 ".*#define TWO." |
| set r4 ".*\r\n$gdb_prompt" |
| set test "info macros" |
| set testname "$test 5" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $test { |
| -re ".*#define THREE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re "$r1$r2$r3$r4" { |
| pass $testname |
| } |
| } |
| gdb_test "next" ".*" "" |
| gdb_test "next" ".*" "" |
| |
| set r1 ".*#define DEF_MACROS" |
| set r2 ".*\r\n$gdb_prompt" |
| set testname "$test 6" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { |
| -re ".*#define FOO \" \".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOO\\(a\\) foo = a.*" { |
| fail $testname |
| } |
| -re ".*#define ONE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define TWO.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define THREE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOUR.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re "$r1$r2" { |
| pass $testname |
| } |
| } |
| |
| gdb_test "next" ".*" "" |
| set r1 ".*#define DEF_MACROS" |
| set r2 ".*#define FOO\\(a\\) foo = a" |
| set r3 ".*#define FOUR" |
| set r4 ".*\r\n$gdb_prompt" |
| set testname "$test 7" |
| gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { |
| -re ".*#define FOO \" \".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOO \"hello\".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define FOO \"world\".*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define ONE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define TWO.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re ".*#define THREE.*\r\n$gdb_prompt" { |
| fail $testname |
| } |
| -re "$r1$r2$r3$r4" { |
| pass $testname |
| } |
| } |
| |
| set test "info macros info-macros.c:42" |
| |
| set r1 ".*define DEF_MACROS" |
| set r2 ".*define ONE" |
| # info macros on the line where the #define or #include is |
| # fails to find the macro defined (though it works on the next line.) |
| setup_kfail "gdb/NNNN" *-*-* |
| gdb_test "$test" "$r1$r2" |