1# Copyright 2009-2016 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# Test multi-exec / multi-process features that work for all configurations, 17# even ones that cannot run multiple processes simultaneously. 18 19set testfile "base" 20 21set exec1 "hello" 22set srcfile1 ${exec1}.c 23set binfile1 [standard_output_file ${exec1}] 24 25set exec2 "hangout" 26set srcfile2 ${exec2}.c 27set binfile2 [standard_output_file ${exec2}] 28 29set exec3 "goodbye" 30set srcfile3 ${exec3}.c 31set binfile3 [standard_output_file ${exec3}] 32 33if { [build_executable ${testfile}.exp ${exec1} "${srcfile1}" {debug}] == -1 } { 34 return -1 35} 36 37if { [build_executable ${testfile}.exp ${exec2} "${srcfile2}" {debug}] == -1} { 38 return -1 39} 40 41if { [build_executable ${testfile}.exp ${exec3} "${srcfile3}" {debug}] == -1 } { 42 return -1 43} 44 45clean_restart ${exec1} 46 47gdb_test {print $_inferior} " = 1" 48 49# Add an empty inferior, switch to it, and load a main executable into 50# it. 51gdb_test "add-inferior" "Added inferior 2.*" "add empty inferior 2" 52gdb_test "inferior 2" "Switching to inferior 2.*" "switch to inferior 2" 53gdb_test "file ${binfile2}" ".*" "load ${exec2} file in inferior 2" 54 55gdb_test {print $_inferior} " = 2" "print \$_inferior after switching" 56 57# Add a new inferior and load a main executable into it in one 58# command. 59gdb_test "add-inferior -exec ${binfile3}" \ 60 "Added inferior 3.*" \ 61 "add inferior 3 with -exec ${exec3}" 62 63# Check that we have multiple inferiors. 64 65gdb_test "info inferiors" \ 66 "Executable.*${exec1}.*${exec2}.*${exec3}.*" 67 68# Test info inferiors with args 69 70set see1 0 71set see2 0 72set see3 0 73 74gdb_test_multiple "info inferior 2 3" "info inferior 2 3" { 75 -re ". 1 \[^\r\n\]*${exec1}" { 76 set see1 1 77 exp_continue 78 } 79 -re ". 2 \[^\r\n\]*${exec2}" { 80 set see2 1 81 exp_continue 82 } 83 -re ". 3 \[^\r\n\]*${exec3}" { 84 set see3 1 85 exp_continue 86 } 87 -re "$gdb_prompt $" { 88 if { !$see1 && $see2 && $see3 } then { 89 pass "info inferior 2 3" 90 } else { 91 fail "info inferior 2 3" 92 } 93 } 94} 95 96set see1 0 97set see2 0 98set see3 0 99 100gdb_test_multiple "info inferior 1-2" "info inferior 1-2" { 101 -re ". 1 \[^\r\n\]*${exec1}" { 102 set see1 1 103 exp_continue 104 } 105 -re ". 2 \[^\r\n\]*${exec2}" { 106 set see2 1 107 exp_continue 108 } 109 -re ". 3 \[^\r\n\]*${exec3}" { 110 set see3 1 111 exp_continue 112 } 113 -re "$gdb_prompt $" { 114 if { $see1 && $see2 && !$see3 } then { 115 pass "info inferior 1-2" 116 } else { 117 fail "info inferior 1-2" 118 } 119 } 120} 121 122# Test that we have multiple symbol tables. 123 124gdb_test "inferior 1" ".*" "switch to inferior 1" 125gdb_test "info functions commonfun" \ 126 "${srcfile1}.*" \ 127 "'info functions commonfun' in inferior 1" 128 129gdb_test "inferior 3" ".*" "switch to inferior 3" 130gdb_test "info functions commonfun" \ 131 "${srcfile3}.*" \ 132 "'info functions commonfun' in inferior 3" 133 134gdb_test "inferior 1" ".*" "switch back to inferior 1" 135 136gdb_test_no_output "set listsize 1" 137 138gdb_test "list commonfun" "from hello.*" "list commonfun in hello" 139 140gdb_test "print hglob" "1" 141 142gdb_test "print glob" "92" "print glob (${exec1})" 143 144 145gdb_test "inferior 3" ".*" "switch to inferior 3 to print globals" 146 147gdb_test "print gglob" "2" 148 149gdb_test "print glob" "45" "print glob (${exec3})" 150 151gdb_test "list commonfun" "from goodbye.*" "list commonfun in goodbye" 152 153 154# Let's run the hello program. 155gdb_test "inferior 1" ".*" "switch to inferior 1 to run it" 156 157if { ![runto_main] } then { 158 return -1 159} 160 161gdb_test "break hello" ".*" 162gdb_test "continue" "Breakpoint \[0-9\].*, hello.*" 163 164# Now let's remove the other two 165 166gdb_test_no_output "remove-inferiors 2-3" "remove-inferiors 2-3" 167 168set see1 0 169set see2 0 170set see3 0 171 172gdb_test_multiple "info inferiors" "check remove-inferiors" { 173 -re ". 3 \[^\r\n\]*${exec3}" { 174 set see3 1 175 exp_continue 176 } 177 -re ". 2 \[^\r\n\]*${exec2}" { 178 set see2 1 179 exp_continue 180 } 181 -re ". 1 \[^\r\n\]*${exec1}" { 182 set see1 1 183 exp_continue 184 } 185 -re "$gdb_prompt $" { 186 if { $see1 && !$see2 && !$see3 } then { 187 pass "check remove-inferiors" 188 } else { 189 fail "check remove-inferiors" 190 } 191 } 192} 193 194