old-cross-binutils/gdb/testsuite/gdb.base/return2.exp
Joel Brobecker e22f8b7c8c Switch the license of all .exp files to GPLv3.
Switch the license of all .f and .f90 files to GPLv3.
        Switch the license of all .s and .S files to GPLv3.
2007-08-23 18:14:19 +00:00

130 lines
3.4 KiB
Text

# Copyright 2000, 2001, 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
set testfile "return2"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
untested return2.exp
return -1
}
proc return_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 "return testval.${type}_testval\n"
gdb_expect {
-re "Make ${type}_func return now.*y or n. $" {
send_gdb "y\n"
exp_continue
}
-re ".*${type}_resultval *= ${type}_func.*$gdb_prompt $" {
send_gdb "step\n"
exp_continue
}
-re ".*${type}_checkpoint.*$gdb_prompt $" {
pass "return from ${type}_func"
}
-re ".*$gdb_prompt $" {
fail "return from ${type}_func"
}
timeout {
fail "return from ${type}_func (timeout)"
}
}
gdb_test "print ${type}_resultval == testval.${type}_testval" ".* = 1" \
"${type} value returned successfully"
gdb_test "print ${type}_resultval != ${type}_returnval" ".* = 1" \
"validate result value not equal to program return value"
}
proc return_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 "return \n"
gdb_expect {
-re "Make void_func return now.*y or n. $" {
send_gdb "y\n"
exp_continue
}
-re ".*void_func.*call to void_func.*$gdb_prompt $" {
send_gdb "step\n"
exp_continue
}
-re ".*void_checkpoint.*$gdb_prompt $" {
pass "return from void_func"
}
-re ".*$gdb_prompt $" {
fail "return from void_func"
}
timeout {
fail "return from void_func (timeout)"
}
}
gdb_test "print void_test == 0" ".* = 1" \
"void function returned successfully"
}
proc return2_tests { } {
global gdb_prompt
if { ! [ runto_main ] } then {
untested return2.exp
return -1
}
return_void
return_1 "char"
return_1 "short"
return_1 "int"
return_1 "long"
if { ! [istarget "m6811-*-*"] && ![istarget "h8300*-*"] } then {
return_1 "long_long"
}
return_1 "float"
if { ! [istarget "m6811-*-*"] } then {
return_1 "double"
}
}
# Start with a fresh gdb.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
set timeout 30
return2_tests