1 1.11 christos # Copyright 1992-2024 Free Software Foundation, Inc. 2 1.1 christos 3 1.1 christos # This program is free software; you can redistribute it and/or modify 4 1.1 christos # it under the terms of the GNU General Public License as published by 5 1.1 christos # the Free Software Foundation; either version 3 of the License, or 6 1.1 christos # (at your option) any later version. 7 1.1 christos # 8 1.1 christos # This program is distributed in the hope that it will be useful, 9 1.1 christos # but WITHOUT ANY WARRANTY; without even the implied warranty of 10 1.1 christos # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 1.1 christos # GNU General Public License for more details. 12 1.1 christos # 13 1.1 christos # You should have received a copy of the GNU General Public License 14 1.1 christos # along with this program. If not, see <http://www.gnu.org/licenses/>. 15 1.1 christos 16 1.1 christos # This file was written by Fred Fish. (fnf (at) cygnus.com) 17 1.1 christos 18 1.1 christos 19 1.1 christos standard_testfile scope0.c scope1.c 20 1.1 christos 21 1.8 christos if {[build_executable "failed to build" ${testfile} \ 22 1.1 christos [list $srcfile $srcfile2] {debug}]} { 23 1.1 christos return -1 24 1.1 christos } 25 1.1 christos 26 1.1 christos # Test locating various things when stopped just inside main, after 27 1.1 christos # running init0(). To prevent cascading of errors, we report the 28 1.1 christos # first one and quit. If all pass, then we print the pass results. 29 1.1 christos 30 1.10 christos proc_with_prefix test_at_main {} { 31 1.1 christos global gdb_prompt 32 1.1 christos global decimal 33 1.1 christos global det_file 34 1.1 christos global srcdir 35 1.1 christos global subdir 36 1.1 christos 37 1.1 christos # skip past init0. 38 1.1 christos # This used to do an extra "next" if the first one didn't get us 39 1.1 christos # over the call to init0, to handle calls to __main in the 40 1.1 christos # prologue, etc. But if a breakpoint at main doesn't leave us on 41 1.1 christos # the first line of real code in the function, that's a GDB bug. 42 1.1 christos gdb_test "next" "$decimal.*foo \\(\\);" "next over init0() in main" 43 1.1 christos 44 1.1 christos # Print scope0.c::filelocal, which is 1 45 1.10 christos gdb_test "print filelocal" "\\\$$decimal = 1" 46 1.10 christos gdb_test "print 'scope0.c'::filelocal" "\\\$$decimal = 1" "print 'scope0.c'::filelocal at main" 47 1.1 christos 48 1.1 christos # Print scope0.c::filelocal_bss, which is 101 49 1.10 christos gdb_test "print filelocal_bss" "\\\$$decimal = 101" 50 1.10 christos gdb_test "print 'scope0.c'::filelocal_bss" "\\\$$decimal = 101" "print 'scope0.c'::filelocal_bss in test_at_main" 51 1.1 christos 52 1.1 christos # Print scope0.c::filelocal_ro, which is 201 53 1.1 christos 54 1.1 christos # No clue why the rs6000 fails this test. 55 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 56 1.10 christos gdb_test "print filelocal_ro" "\\\$$decimal = 201" "print filelocal_ro in test_at_main" 57 1.1 christos 58 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 59 1.10 christos gdb_test "print 'scope0.c'::filelocal_ro" "\\\$$decimal = 201" "print 'scope0.c'::filelocal_ro" 60 1.1 christos 61 1.1 christos # Print scope1.c::filelocal, which is 2 62 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 63 1.10 christos gdb_test "print 'scope1.c'::filelocal" "\\\$$decimal = 2" "print 'scope1.c'::filelocal" 64 1.1 christos 65 1.1 christos # Print scope1.c::filelocal_bss, which is 102 66 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 67 1.10 christos gdb_test "print 'scope1.c'::filelocal_bss" "\\\$$decimal = 102" "print 'scope1.c'::filelocal_bss" 68 1.1 christos 69 1.1 christos # Print scope1.c::filelocal_ro, which is 202 70 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 71 1.10 christos gdb_test "print 'scope1.c'::filelocal_ro" "\\\$$decimal = 202" "print 'scope1.c'::filelocal_ro" 72 1.1 christos 73 1.1 christos # Print scope1.c::foo::funclocal, which is 3 74 1.10 christos gdb_test "print foo::funclocal" "\\\$$decimal = 3" 75 1.1 christos 76 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 77 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal" "\\\$$decimal = 3" "print 'scope1.c'::foo::funclocal" 78 1.1 christos 79 1.1 christos # Print scope1.c::foo::funclocal_ro, which is 203 80 1.10 christos gdb_test "print foo::funclocal_ro" "\\\$$decimal = 203" 81 1.1 christos 82 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 83 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal_ro" "\\\$$decimal = 203" "print 'scope1.c'::foo::funclocal_ro" 84 1.1 christos 85 1.1 christos # Print scope1.c::bar::funclocal, which is 4 86 1.10 christos gdb_test "print bar::funclocal" "\\\$$decimal = 4" 87 1.1 christos 88 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 89 1.10 christos gdb_test "print 'scope1.c'::bar::funclocal" "\\\$$decimal = 4" "print 'scope1.c'::bar::funclocal" 90 1.1 christos } 91 1.1 christos 92 1.10 christos proc_with_prefix test_at_foo {} { 93 1.1 christos global gdb_prompt 94 1.1 christos global decimal 95 1.1 christos global det_file 96 1.1 christos global srcdir 97 1.1 christos global subdir 98 1.1 christos 99 1.10 christos gdb_test "next" ".*bar \\(\\);" 100 1.1 christos 101 1.1 christos # Print scope0.c::filelocal, which is 1 102 1.10 christos gdb_test "print 'scope0.c'::filelocal" "\\\$$decimal = 1" "print 'scope0.c'::filelocal at foo" 103 1.1 christos 104 1.1 christos # Print scope0.c::filelocal_bss, which is 101 105 1.10 christos gdb_test "print 'scope0.c'::filelocal_bss" "\\\$$decimal = 101" "print 'scope0.c'::filelocal_bss in test_at_foo" 106 1.1 christos 107 1.1 christos # Print scope0.c::filelocal_ro, which is 201 108 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 109 1.10 christos gdb_test "print 'scope0.c'::filelocal_ro" "\\\$$decimal = 201" "print 'scope0.c'::filelocal_ro" 110 1.1 christos 111 1.1 christos 112 1.10 christos # Print scope1.c::filelocal, which is 2 113 1.1 christos gdb_test "print filelocal" "\\\$$decimal = 2" "print filelocal at foo" 114 1.1 christos 115 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 116 1.10 christos gdb_test "print 'scope1.c'::filelocal" "\\\$$decimal = 2" "print 'scope1.c'::filelocal at foo" 117 1.1 christos 118 1.1 christos gdb_test "print filelocal_bss" "\\\$$decimal = 102" \ 119 1.1 christos "print filelocal_bss at foo" 120 1.1 christos 121 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 122 1.10 christos gdb_test "print 'scope1.c'::filelocal_bss" "\\\$$decimal = 102" "print 'scope1.c'::filelocal_bss at foo" 123 1.1 christos 124 1.1 christos 125 1.1 christos gdb_test "print filelocal_ro" "\\\$$decimal = 202" \ 126 1.1 christos "print filelocal_ro at foo" 127 1.1 christos 128 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 129 1.10 christos gdb_test "print 'scope1.c'::filelocal_ro" "\\\$$decimal = 202" "print 'scope1.c'::filelocal_ro at foo" 130 1.1 christos 131 1.1 christos 132 1.1 christos # Print scope1.c::foo::funclocal, which is 3 133 1.1 christos 134 1.1 christos gdb_test "print funclocal" "\\\$$decimal = 3" "print funclocal at foo" 135 1.1 christos 136 1.1 christos gdb_test "print foo::funclocal" "\\\$$decimal = 3" \ 137 1.1 christos "print foo::funclocal at foo" 138 1.1 christos 139 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 140 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal" "\\\$$decimal = 3" "print 'scope1.c'::foo::funclocal at foo" 141 1.1 christos 142 1.1 christos 143 1.1 christos # Print scope1.c::foo::funclocal_bss, which is 103 144 1.1 christos 145 1.1 christos gdb_test "print funclocal_bss" "\\\$$decimal = 103" \ 146 1.1 christos "print funclocal_bss at foo" 147 1.1 christos 148 1.1 christos gdb_test "print foo::funclocal_bss" "\\\$$decimal = 103" \ 149 1.1 christos "print foo::funclocal_bss at foo" 150 1.1 christos 151 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 152 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal_bss" "\\\$$decimal = 103" "print 'scope1.c'::foo::funclocal_bss at foo" 153 1.1 christos 154 1.1 christos 155 1.1 christos # Print scope1.c::foo::funclocal_ro, which is 203 156 1.1 christos 157 1.1 christos gdb_test "print funclocal_ro" "\\\$$decimal = 203" \ 158 1.1 christos "print funclocal_ro at foo" 159 1.1 christos 160 1.1 christos gdb_test "print foo::funclocal_ro" "\\\$$decimal = 203" \ 161 1.1 christos "print foo::funclocal_ro at foo" 162 1.1 christos 163 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 164 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal_ro" "\\\$$decimal = 203" "print 'scope1.c'::foo::funclocal_ro at foo" 165 1.1 christos 166 1.1 christos 167 1.1 christos # Print scope1.c::bar::funclocal, which is 4 168 1.1 christos 169 1.1 christos gdb_test "print bar::funclocal" "\\\$$decimal = 4" \ 170 1.1 christos "print bar::funclocal at foo" 171 1.1 christos 172 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 173 1.10 christos gdb_test "print 'scope1.c'::bar::funclocal" "\\\$$decimal = 4" "print 'scope1.c'::bar::funclocal at foo" 174 1.1 christos 175 1.1 christos } 176 1.1 christos 177 1.10 christos proc_with_prefix test_at_bar {} { 178 1.1 christos global gdb_prompt 179 1.1 christos global decimal 180 1.1 christos global det_file 181 1.1 christos global srcdir 182 1.1 christos global subdir 183 1.1 christos 184 1.10 christos gdb_test "next" 185 1.1 christos 186 1.1 christos # Print scope0.c::filelocal, which is 1 187 1.10 christos gdb_test "print 'scope0.c'::filelocal" "\\\$$decimal = 1" "print 'scope0.c'::filelocal at bar" 188 1.1 christos 189 1.10 christos # Print scope0.c::filelocal_bss, which is 101 190 1.10 christos gdb_test "print 'scope0.c'::filelocal_bss" "\\\$$decimal = 101" "print 'scope0.c'::filelocal_bss in test_at_bar" 191 1.1 christos 192 1.10 christos # Print scope0.c::filelocal_ro, which is 201 193 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 194 1.10 christos gdb_test "print 'scope0.c'::filelocal_ro" "\\\$$decimal = 201" "print 'scope0.c'::filelocal_ro at bar" 195 1.1 christos 196 1.1 christos # Print scope1.c::filelocal, which is 2 197 1.10 christos gdb_test "print filelocal" "\\\$$decimal = 2" "print filelocal at bar" 198 1.1 christos 199 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 200 1.10 christos gdb_test "print 'scope1.c'::filelocal" "\\\$$decimal = 2" "print 'scope1.c'::filelocal at bar" 201 1.1 christos 202 1.1 christos # Print scope1.c::filelocal_bss, which is 102 203 1.10 christos gdb_test "print filelocal_bss" "\\\$$decimal = 102" "print filelocal_bss at bar" 204 1.1 christos 205 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 206 1.10 christos gdb_test "print 'scope1.c'::filelocal_bss" "\\\$$decimal = 102" "print 'scope1.c'::filelocal_bss at bar" 207 1.1 christos 208 1.1 christos # Print scope1.c::filelocal_ro, which is 202 209 1.10 christos gdb_test "print filelocal_ro" "\\\$$decimal = 202" "print filelocal_ro in test_at_bar" 210 1.1 christos 211 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 212 1.10 christos gdb_test "print 'scope1.c'::filelocal_ro" "\\\$$decimal = 202" "print 'scope1.c'::filelocal_ro at bar" 213 1.1 christos 214 1.1 christos # Print scope1.c::foo::funclocal, which is 3 215 1.10 christos gdb_test "print foo::funclocal" "\\\$$decimal = 3" "print foo::funclocal at bar" 216 1.1 christos 217 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 218 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal" "\\\$$decimal = 3" "print 'scope1.c'::foo::funclocal at bar" 219 1.1 christos 220 1.1 christos # Print scope1.c::foo::funclocal_bss, which is 103 221 1.10 christos gdb_test "print foo::funclocal_bss" "\\\$$decimal = 103" "print foo::funclocal_bss at bar" 222 1.1 christos 223 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 224 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal_bss" "\\\$$decimal = 103" "print 'scope1.c'::foo::funclocal_bss at bar" 225 1.1 christos 226 1.1 christos # Print scope1.c::foo::funclocal_ro, which is 203 227 1.10 christos gdb_test "print foo::funclocal_ro" "\\\$$decimal = 203" "print foo::funclocal_ro at bar" 228 1.1 christos 229 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 230 1.10 christos gdb_test "print 'scope1.c'::foo::funclocal_ro" "\\\$$decimal = 203" "print 'scope1.c'::foo::funclocal_ro at bar" 231 1.1 christos 232 1.1 christos # Print scope1.c::bar::funclocal, which is 4 233 1.10 christos gdb_test "print funclocal" "\\\$$decimal = 4" "print funclocal at bar" 234 1.10 christos gdb_test "print bar::funclocal" "\\\$$decimal = 4" "print bar::funclocal at bar" 235 1.1 christos 236 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 237 1.10 christos gdb_test "print 'scope1.c'::bar::funclocal" "\\\$$decimal = 4" "print 'scope1.c'::bar::funclocal at bar" 238 1.1 christos 239 1.1 christos # Print scope1.c::bar::funclocal_bss, which is 104 240 1.10 christos gdb_test "print funclocal_bss" "\\\$$decimal = 104" "print funclocal_bss at bar" 241 1.10 christos gdb_test "print bar::funclocal_bss" "\\\$$decimal = 104" "print bar::funclocal_bss at bar" 242 1.1 christos 243 1.10 christos if {[test_compiler_info gcc-*-*]} { setup_xfail "rs6000-*-*" } 244 1.10 christos gdb_test "print 'scope1.c'::bar::funclocal_bss" "\\\$$decimal = 104" "print 'scope1.c'::bar::funclocal_bss at bar" 245 1.1 christos } 246 1.1 christos 247 1.1 christos # This test has little to do with local scopes, but it is in scope.exp anyway. 248 1.1 christos # That's life. 249 1.1 christos 250 1.10 christos proc_with_prefix test_at_autovars {} { 251 1.1 christos global gdb_prompt 252 1.1 christos global decimal 253 1.1 christos global hex 254 1.1 christos global srcfile 255 1.1 christos 256 1.1 christos # Test symbol table lookup with 100 local (auto) variables. 257 1.1 christos 258 1.1 christos gdb_breakpoint marker1 259 1.1 christos 260 1.10 christos gdb_test "cont" "Break.* marker1 \\(\\) at .*:$decimal.*" "continue to marker1" 261 1.10 christos gdb_test "up" ".*autovars.*" "up from marker1" 262 1.1 christos 263 1.1 christos set count 0 264 1.1 christos while {$count < 100} { 265 1.10 christos gdb_test "print i$count" ".* = $count" "" 266 1.1 christos set count [expr $count+1] 267 1.1 christos } 268 1.1 christos clear_xfail "*-*-*" 269 1.1 christos pass "$count auto variables correctly initialized" 270 1.1 christos 271 1.1 christos # Test that block variable sorting is not screwing us. 272 1.1 christos gdb_test "frame" "#.*autovars \\(bcd=5, abc=6\\).*" "args in correct order" 273 1.1 christos } 274 1.1 christos 275 1.10 christos proc_with_prefix test_at_localscopes {} { 276 1.1 christos global gdb_prompt 277 1.1 christos global decimal 278 1.1 christos global hex 279 1.1 christos global srcfile 280 1.1 christos 281 1.1 christos gdb_breakpoint marker2 282 1.1 christos gdb_breakpoint marker3 283 1.1 christos gdb_breakpoint marker4 284 1.1 christos 285 1.10 christos gdb_test "cont" "Break.* marker2 \\(\\) at .*:$decimal.*" "continue to marker2" 286 1.10 christos gdb_test "up" ".*localscopes.*" "up from marker2" 287 1.1 christos 288 1.1 christos # Should be at first (outermost) scope. Check values. 289 1.1 christos 290 1.1 christos gdb_test "print localval" " = 10" "print localval, outer scope" 291 1.1 christos gdb_test "print localval1" " = 11" "print localval1, outer scope" 292 1.1 christos gdb_test "print localval2" "No symbol \"localval2\" in current context." \ 293 1.1 christos "print localval2, outer scope" 294 1.1 christos gdb_test "print localval3" "No symbol \"localval3\" in current context." \ 295 1.1 christos "print localval3, outer scope" 296 1.1 christos 297 1.10 christos gdb_test "cont" "Break.* marker3 \\(\\) at .*:$decimal.*" \ 298 1.10 christos "continue to marker3" 299 1.10 christos gdb_test "up" ".*localscopes.*" "up from marker3" 300 1.1 christos 301 1.1 christos # Should be at next (first nested) scope. Check values. 302 1.1 christos 303 1.1 christos gdb_test "print localval" " = 20" \ 304 1.1 christos "print localval, first nested scope" 305 1.1 christos gdb_test "print localval1" " = 11" "print localval1, first nested scope" 306 1.1 christos gdb_test "print localval2" " = 12" "print localval2, first nested scope" 307 1.1 christos gdb_test "print localval3" "No symbol \"localval3\" in current context." \ 308 1.1 christos "print localval3, first nested scope" 309 1.1 christos 310 1.1 christos # This test will only fail if the file was compiled by gcc, but 311 1.1 christos # there's no way to check that. 312 1.10 christos gdb_test "cont" "Break.* marker4.*at .*:$decimal.*" \ 313 1.10 christos "continue to marker4" 314 1.10 christos gdb_test "up" ".*localscopes.*" "up from marker4" 315 1.1 christos 316 1.1 christos gdb_test "print localval" " = 30" "print localval, innermost scope" 317 1.1 christos gdb_test "print localval1" " = 11" "print localval1, innermost scope" 318 1.1 christos gdb_test "print localval2" " = 12" "print localval2, innermost scope" 319 1.1 christos gdb_test "print localval3" " = 13" "print localval3, innermost scope" 320 1.1 christos } 321 1.1 christos 322 1.8 christos # Note, we don't pass a binfile to clean_restart because we need to 323 1.8 christos # avoid gdb_load here. With remote targets, gdb_load connects to the 324 1.8 christos # remote target, and we specificaly want the following tests to run 325 1.8 christos # before the program is started. 326 1.8 christos clean_restart 327 1.8 christos gdb_file_cmd $binfile 328 1.8 christos 329 1.1 christos # Test that variables in various segments print out correctly before 330 1.1 christos # the program is run. 331 1.1 christos 332 1.1 christos # AIX--sections get mapped to the same address so we can't get the right one. 333 1.1 christos setup_xfail "rs6000-*-*" 334 1.1 christos 335 1.1 christos gdb_test "print 'scope0.c'::filelocal_ro" "= 201" 336 1.1 christos 337 1.8 christos # Check that gdb can access bss memory if the inferior is not running. 338 1.1 christos # 339 1.8 christos # Note the care above about avoiding gdb_load. Otherwise, for 340 1.8 christos # embedded stub-like boards, this test would randomly fail. If we'd 341 1.8 christos # already put target remote on the target stack, we'd read memory from 342 1.8 christos # the board instead of the program's binary, and we would have 343 1.8 christos # connected before crt0.o had had a chance to clear bss. 344 1.8 christos gdb_test "print 'scope0.c'::filelocal_bss" "= 0" \ 345 1.8 christos "print 'scope0.c'::filelocal_bss before run" 346 1.1 christos 347 1.1 christos gdb_test "print 'scope0.c'::filelocal" "= 1" \ 348 1.1 christos "print 'scope0.c'::filelocal before run" 349 1.1 christos 350 1.10 christos if {[runto_main]} { test_at_main } 351 1.10 christos if {[runto foo]} { test_at_foo } 352 1.10 christos if {[runto bar]} { test_at_bar } 353 1.10 christos if {[runto localscopes]} { test_at_localscopes } 354 1.10 christos if {[runto autovars]} { test_at_autovars } 355