e22f8b7c8c
Switch the license of all .f and .f90 files to GPLv3. Switch the license of all .s and .S files to GPLv3.
126 lines
3.3 KiB
Text
126 lines
3.3 KiB
Text
# Copyright 2000, 2004, 2007 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/>.
|
|
|
|
# Please email any bugs, comments, and/or additions to this file to:
|
|
# bug-gdb@prep.ai.mit.edu
|
|
|
|
# This file was written by Michael Snyder (msnyder@redhat.com)
|
|
|
|
if $tracelevel then {
|
|
strace $tracelevel
|
|
}
|
|
|
|
set prms_id 0
|
|
set bug_id 0
|
|
|
|
# re-use the program from the "return2" test.
|
|
set testfile "return2"
|
|
set srcfile ${testfile}.c
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
untested finish.exp
|
|
return -1
|
|
}
|
|
|
|
proc finish_1 { type } {
|
|
global gdb_prompt
|
|
|
|
gdb_test "break ${type}_func" "Breakpoint \[0123456789\].*" \
|
|
"set break on ${type}_func"
|
|
gdb_test "continue" "Breakpoint.* ${type}_func.*" \
|
|
"continue to ${type}_func"
|
|
send_gdb "finish\n"
|
|
gdb_expect {
|
|
-re ".*Value returned is .* = 49 '1'\r\n$gdb_prompt $" {
|
|
if { $type == "char" } {
|
|
pass "finish from char_func"
|
|
} else {
|
|
fail "finish from ${type}_func"
|
|
}
|
|
}
|
|
-re ".*Value returned is .* = \[0123456789\]* '1'\r\n$gdb_prompt $" {
|
|
if { $type == "char" } {
|
|
pass "finish from char_func (non-ASCII char set?)"
|
|
} else {
|
|
fail "finish from ${type}_func"
|
|
}
|
|
}
|
|
-re ".*Value returned is .* = 1\r\n$gdb_prompt $" {
|
|
pass "finish from ${type}_func"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "finish from ${type}_func"
|
|
}
|
|
timeout {
|
|
fail "finish from ${type}_func (timeout)"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc finish_void { } {
|
|
global gdb_prompt
|
|
|
|
gdb_test "break void_func" "Breakpoint \[0123456789\].*" \
|
|
"set break on void_func"
|
|
gdb_test "continue" "Breakpoint.* void_func.*" \
|
|
"continue to void_func"
|
|
send_gdb "finish\n"
|
|
# Some architectures will have one or more instructions after the
|
|
# call instruction which still is part of the call sequence, so we
|
|
# must be prepared for a "finish" to show us the void_func call
|
|
# again as well as the statement after.
|
|
gdb_expect {
|
|
-re ".*void_checkpoint.*$gdb_prompt $" {
|
|
pass "finish from void_func"
|
|
}
|
|
-re "0x\[0-9a-fA-F\]+ in main.*call to void_func.*$gdb_prompt $" {
|
|
pass "finish from void_func"
|
|
}
|
|
-re ".*$gdb_prompt $" {
|
|
fail "finish from void_func"
|
|
}
|
|
timeout {
|
|
fail "finish from void_func (timeout)"
|
|
}
|
|
}
|
|
}
|
|
|
|
proc finish_tests { } {
|
|
global gdb_prompt
|
|
|
|
if { ! [ runto_main ] } then {
|
|
untested finish.exp
|
|
return -1
|
|
}
|
|
|
|
finish_void
|
|
finish_1 "char"
|
|
finish_1 "short"
|
|
finish_1 "int"
|
|
finish_1 "long"
|
|
finish_1 "long_long"
|
|
finish_1 "float"
|
|
finish_1 "double"
|
|
}
|
|
|
|
# Start with a fresh gdb.
|
|
|
|
gdb_exit
|
|
gdb_start
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
gdb_load ${binfile}
|
|
|
|
set timeout 30
|
|
finish_tests
|