| # Copyright 2011-2021 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 |
| } |
| |
| set options {debug} |
| |
| get_compiler_info |
| if { [test_compiler_info gcc*] } { |
| lappend options "additional_flags=-g3" |
| } elseif { [test_compiler_info clang*] } { |
| lappend options "additional_flags=-fdebug-macro" |
| } else { |
| untested "no compiler info" |
| return -1 |
| } |
| |
| if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} $options] } { |
| return -1 |
| } |
| |
| if ![runto_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\]" \ |
| "info macro -- <EOL>" |
| gdb_test "info macro -- " \ |
| "You must follow.*with the name.*you want to see.*\[^\r\n\]*\[\r\n\]" \ |
| "info macro -- <EOL>" |
| |
| 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" |
| |
| set test "info macros" |
| set r1 "#define FOO \"hello\"" |
| set r2 "#define ONE" |
| set testname "$test 2" |
| gdb_test_lines $test $testname $r1.*$r2 \ |
| -re-not "#define TWO" \ |
| -re-not "#define THREE" \ |
| -re-not "#define FOUR" |
| |
| gdb_test "next" ".*" "" |
| |
| set r1 "#define FOO \" \"" |
| set r2 "#define ONE" |
| set r3 "#define TWO" |
| set testname "$test 3" |
| gdb_test_lines $test $testname $r1.*$r2.*$r3 \ |
| -re-not "#define THREE" \ |
| -re-not "#define FOUR" |
| |
| gdb_test "next" ".*" "" |
| |
| # in alpabetical order... |
| set r1 "#define FOO \"world\"" |
| set r2 "#define ONE" |
| set r3 "#define THREE" |
| set r4 "#define TWO" |
| set testname "$test 4" |
| gdb_test_lines $test $testname $r1.*$r2.*$r3.*$r4 \ |
| -re-not "#define FOUR" |
| |
| # same as above with a linespec. |
| set test "info macros *\$pc" |
| gdb_test_lines $test "" $r1.*$r2.*$r3.*$r4 \ |
| -re-not "#define FOUR" |
| gdb_test "next" ".*" "" |
| |
| set r1 "#define FOO \" \"" |
| set r2 "#define ONE" |
| set r3 "#define TWO." |
| set test "info macros" |
| set testname "$test 5" |
| gdb_test_lines $test $testname $r1.*$r2.*$r3 \ |
| -re-not "#define THREE" \ |
| -re-not "#define FOUR" |
| gdb_test "next" ".*" "" |
| gdb_test "next" ".*" "" |
| |
| set r1 "#define DEF_MACROS" |
| set testname "$test 6" |
| gdb_test_lines $test $testname $r1 \ |
| -re-not "#define FOO" \ |
| -re-not "#define ONE" \ |
| -re-not "#define TWO" \ |
| -re-not "#define THREE" \ |
| -re-not "#define FOUR" |
| |
| gdb_test "next" ".*" "" |
| set r1 "#define DEF_MACROS" |
| set r2 "#define FOO\\(a\\) foo = a" |
| set r3 "#define FOUR" |
| set testname "$test 7" |
| gdb_test_lines $test $testname $r1.*$r2.*$r3 \ |
| -re-not "#define FOO \" \"" \ |
| -re-not "#define FOO \"hello\"" \ |
| -re-not "#define FOO \"world\"" \ |
| -re-not "#define ONE" \ |
| -re-not "#define TWO" \ |
| -re-not "#define THREE" |
| |
| set test "info macros info-macros.c:42" |
| |
| set r1 "#define DEF_MACROS " |
| set r2 "#define ONE" |
| gdb_test_lines "$test" "" [multi_line \ |
| "" \ |
| "$r1" \ |
| "(.*\r\n)?$r2"] |