# Copyright 2017-2024 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 . # Test "info inferiors" and "info connections" with multiple targets. load_lib gdb-python.exp source $srcdir/$subdir/multi-target.exp.tcl if {![multi_target_prepare]} { return } # Cache the result of calling allow_python_tests into a local variable. set run_python_tests [allow_python_tests] # Test "info inferiors" and "info connections". MULTI_PROCESS # indicates whether the multi-process feature of remote targets is # turned off or on. proc test_info_inferiors {multi_process} { setup "off" $multi_process if { $::run_python_tests } { gdb_test_no_output "source ${::remote_python_file}" "load python file" } # Get the description for inferior INF for when the current # inferior id is CURRENT. proc inf_desc {inf current} { set ws "\[ \t\]+" global decimal upvar multi_process multi_process if {($multi_process == "off") && ($inf == 2 || $inf == 5)} { set desc "Remote target" } else { set desc "process ${decimal}" } set desc "${inf}${ws}${desc}${ws}" if {$inf == $current} { return "\\* $desc" } else { return " $desc" } } # Get the "Num" column for CONNECTION for when the current # inferior id is CURRENT_INF. proc connection_num {connection current_inf} { switch $current_inf { "4" { set current_connection "1"} "5" { set current_connection "4"} "6" { set current_connection "5"} default { set current_connection $current_inf} } if {$connection == $current_connection} { return "\\* $connection" } else { return " $connection" } } set ws "\[ \t\]+" global decimal binfile # Test "info connections" and "info inferior" by switching to each # inferior one by one. for {set inf 1} {$inf <= 6} {incr inf} { with_test_prefix "inferior $inf" { gdb_test "inferior $inf" "Switching to inferior $inf.*" gdb_test "info connections" \ [multi_line \ "Num${ws}What${ws}Description${ws}" \ "[connection_num 1 $inf]${ws}native${ws}Native process${ws}" \ "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol${ws}" \ "[connection_num 3 $inf]${ws}core${ws}Local core dump file${ws}" \ "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol${ws}" \ "[connection_num 5 $inf]${ws}core${ws}Local core dump file${ws}" \ ] if { $::run_python_tests } { gdb_test "python info_connections()" \ [multi_line \ "Num${ws}What${ws}Description" \ "[connection_num 1 $inf]${ws}native${ws}Native process" \ "[connection_num 2 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol" \ "[connection_num 3 $inf]${ws}core${ws}Local core dump file" \ "[connection_num 4 $inf]${ws}extended-remote localhost:$decimal${ws}Extended remote target using gdb-specific protocol" \ "[connection_num 5 $inf]${ws}core${ws}Local core dump file" \ ] } gdb_test "info inferiors" \ [multi_line \ "Num${ws}Description${ws}Connection${ws}Executable${ws}" \ "[inf_desc 1 $inf]1 \\(native\\)${ws}${binfile}${ws}" \ "[inf_desc 2 $inf]2 \\(extended-remote localhost:$decimal\\)${ws}${binfile}${ws}" \ "[inf_desc 3 $inf]3 \\(core\\)${ws}${binfile}${ws}" \ "[inf_desc 4 $inf]1 \\(native\\)${ws}${binfile}${ws}" \ "[inf_desc 5 $inf]4 \\(extended-remote localhost:$decimal\\)${ws}${binfile}${ws}" \ "[inf_desc 6 $inf]5 \\(core\\)${ws}${binfile}${ws}" \ ] if { $::run_python_tests } { gdb_test "python info_inferiors()" \ [multi_line \ "Inferior 1, Connection #1: native" \ "Inferior 2, Connection #2: extended-remote localhost:$decimal" \ "Inferior 3, Connection #3: core" \ "Inferior 4, Connection #1: native" \ "Inferior 5, Connection #4: extended-remote localhost:$decimal" \ "Inferior 6, Connection #5: core" \ ] } } } } if { $run_python_tests } { set remote_python_file [gdb_remote_download host \ ${srcdir}/${subdir}/${testfile}.py] } # Test "info inferiors" and "info connections" commands. with_test_prefix "info-inferiors" { foreach_with_prefix multi_process {"on" "off"} { test_info_inferiors $multi_process } } multi_target_cleanup