123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- # Copyright 2018-2022 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/>.
- load_lib "ada.exp"
- if { [skip_ada_tests] } { return -1 }
- # This test verifies that the commands
- # info [functions|variables|types]
- # respect the 'set language auto|ada|c' setting, whatever the language
- # of the current frame.
- # Similarly, checks that rbreak reports its results respecting
- # the language mode.
- standard_ada_testfile proc_in_ada
- set cfile "some_c"
- # gnat normalizes proc_in_ada source file when compiling.
- # As the 'info' commands results are sorted by absolute path names, also normalize
- # the some_c source file to ensure that the 'info' results are always
- # giving Ada results first.
- set csrcfile [file normalize ${srcdir}/${subdir}/${testdir}/${cfile}.c]
- set cobject [standard_output_file ${cfile}.o]
- if { [gdb_compile "${csrcfile}" "${cobject}" object [list debug]] != "" } {
- untested "failed to compile"
- return -1
- }
- if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } {
- untested "failed to compile"
- return -1
- }
- clean_restart ${testfile}
- set bp_location [gdb_get_line_number "STOP" ${testdir}/some_c.c]
- if ![runto "some_c.c:$bp_location"] then {
- return
- }
- set func_in_c(c_syntax) "${decimal}: void proc_in_c\\\(void\\\);"
- set func_in_c(ada_syntax) "${decimal}: procedure proc_in_c;"
- set func_in_ada(c_syntax) "${decimal}: void proc_in_ada\\\(void\\\);"
- set func_in_ada(ada_syntax) "${decimal}: procedure proc_in_ada;"
- set type_in_c(c_syntax) "${decimal}: typedef struct {\\.\\.\\.} some_type_in_c;"
- set type_in_c(ada_syntax) [multi_line \
- "${decimal}: record" \
- " some_component_in_c: int;" \
- "end record" ]
- set type_in_ada(c_syntax) "${decimal}: struct global_pack__some_type_in_ada;"
- set type_in_ada(ada_syntax) "${decimal}: global_pack.some_type_in_ada;"
- set var_in_c(c_syntax) "${decimal}: some_type_in_c some_struct_in_c;"
- set var_in_c(ada_syntax) "${decimal}: some_struct_in_c: some_type_in_c;"
- set var_in_ada(c_syntax) "${decimal}: struct global_pack__some_type_in_ada global_pack.some_struct_in_ada;"
- set var_in_ada(ada_syntax) "${decimal}: global_pack.some_struct_in_ada: global_pack.some_type_in_ada;"
- set rbreak_func_in_c(c_syntax) "void proc_in_c\\\(void\\\);"
- set rbreak_func_in_c(ada_syntax) "procedure proc_in_c;"
- set rbreak_func_in_ada(c_syntax) "void proc_in_ada\\\(void\\\);"
- set rbreak_func_in_ada(ada_syntax) "procedure proc_in_ada;"
- foreach_with_prefix language_choice { "auto" "ada" "c" } {
- # Check that switching to the desired language_choice when the selected
- # frame has the same language (or the desired language is auto) gives no
- # warning. Also set the expected matches for the various commands
- # tested afterwards.
- if {$language_choice == "auto"} {
- gdb_test "frame 0" "#0 .*" "select frame with lang c"
- set c_match c_syntax
- set ada_match ada_syntax
- } elseif {$language_choice == "ada"} {
- gdb_test "frame 1" "#1 .*" "select frame with lang ada"
- set c_match ada_syntax
- set ada_match ada_syntax
- } elseif {$language_choice == "c"} {
- gdb_test "frame 0" "#0 .*" "select frame with lang c"
- set c_match c_syntax
- set ada_match c_syntax
- } else {
- error "unexpected language choice"
- }
- gdb_test_no_output "set language $language_choice" "set language language_choice"
- foreach frame {
- "0"
- "1" } {
- if { $frame == 0 } {
- set frame_lang "c"
- } else {
- set frame_lang "ada"
- }
- with_test_prefix "frame=$frame, frame_lang=$frame_lang" {
- gdb_test "frame $frame" "#$frame .*" "select frame"
- gdb_test "info functions proc_in_" \
- [multi_line \
- "All functions matching regular expression \"proc_in_\":" \
- "" \
- "File .*proc_in_ada.adb:" \
- $func_in_ada($ada_match) \
- "" \
- "File .*some_c.c:" \
- $func_in_c($c_match)
- ]
- gdb_test "info types some_type" \
- [multi_line \
- "All types matching regular expression \"some_type\":" \
- "" \
- "File .*global_pack.ads:" \
- $type_in_ada($ada_match)\
- "" \
- "File .*some_c.c:" \
- $type_in_c($c_match)
- ]
- gdb_test "info variables some_struct" \
- [multi_line \
- "All variables matching regular expression \"some_struct\":" \
- "" \
- "File .*global_pack.ads:" \
- $var_in_ada($ada_match) \
- "" \
- "File .*some_c.c:" \
- $var_in_c($c_match)
- ]
- gdb_test "rbreak proc_in_" \
- [multi_line \
- "Breakpoint.*file .*proc_in_ada.adb,.*" \
- $rbreak_func_in_ada($ada_match) \
- "Breakpoint.*file .*some_c.c,.*" \
- $rbreak_func_in_c($c_match)
- ]
- delete_breakpoints
- }
- }
- }
|