1# Copyright 2005-2020 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 16load_lib "ada.exp" 17 18if { [skip_ada_tests] } { return -1 } 19 20# This testcase verifies the behavior of the `start' command, which 21# does not work when we use the gdb stub... 22if [use_gdb_stub] { 23 untested "skipping tests due to use_gdb_stub" 24 return 25} 26 27standard_ada_testfile first 28 29# Build the first test program (note that cygwin needs the $EXEEXT). 30if {[gdb_compile_ada "${srcfile}" "${binfile}$EXEEXT" executable {debug}] != ""} { 31 return -1 32} 33 34# Build the second test program 35set srcfile2 ${srcdir}/${subdir}/${testdir}/second.adb 36set binfile2 [standard_output_file second$EXEEXT] 37 38if {[gdb_compile_ada "${srcfile2}" "${binfile2}" executable {debug}] != ""} { 39 return -1 40} 41 42# Start with a fresh gdb. 43 44set common_binfile [standard_output_file common$EXEEXT] 45 46gdb_start 47gdb_reinitialize_dir $srcdir/$subdir 48 49# Load the first executable. 50 51gdb_test "shell mv ${binfile} ${common_binfile}" ".*" "" 52gdb_load ${common_binfile} 53 54# Start the program, we should land in the program main procedure 55if { [gdb_start_cmd] < 0 } { 56 untested start 57 return -1 58} 59 60gdb_test "" \ 61 "first \\(\\) at .*first.adb.*" \ 62 "start first" 63 64# Restore first executable to its original name, and move 65# second executable into its place. Ensure that the new 66# executable is at least a second newer than the old. 67 68gdb_test "shell mv ${common_binfile} ${binfile}" ".*" "" 69gdb_test "shell mv ${binfile2} ${common_binfile}" ".*" "" 70gdb_test "shell sleep 1" ".*" "" 71gdb_test "shell touch ${common_binfile}" ".*" "" 72 73# Start the program a second time, GDB should land in procedure Second 74# this time. 75 76if { [gdb_start_cmd] < 0 } { 77 fail "start second" 78} else { 79 gdb_test "" \ 80 "second \\(\\) at .*second.adb.*" \ 81 "start second" 82} 83 84# Try again, this time with just changing the file time of first. 85 86clean_restart "${binfile}$EXEEXT" 87 88# Ensure we don't accidently use the main symbol cache. 89gdb_test_no_output "mt set symbol-cache-size 0" 90 91# Put something in the symbol lookup cache that will get looked up when 92# starting after having re-read symbols. PR 17855. 93gdb_breakpoint break_me 94 95gdb_test "shell touch ${binfile}$EXEEXT" ".*" "" 96gdb_test "shell sleep 1" ".*" "" 97 98if { [gdb_start_cmd] < 0 } { 99 # PR 17855: At this point gdb may have crashed or gotten an internal 100 # error, but we still need to detect this. Just issue any simple command 101 # to verify gdb is still running. This will establish in gdb.log whether 102 # gdb is still running. 103 gdb_test_no_output "set \$check_gdb_running = 0" "check gdb running" 104 fail "start just first" 105} else { 106 gdb_test "" \ 107 "first \\(\\) at .*first.adb.*" \ 108 "start just first" 109} 110