1# Copyright (C) 1992, 1997, 2001, 2007, 2008, 2009, 2010, 2011 2# Free Software Foundation, Inc. 3 4# This program is free software; you can redistribute it and/or modify 5# it under the terms of the GNU General Public License as published by 6# the Free Software Foundation; either version 3 of the License, or 7# (at your option) any later version. 8# 9# This program is distributed in the hope that it will be useful, 10# but WITHOUT ANY WARRANTY; without even the implied warranty of 11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12# GNU General Public License for more details. 13# 14# You should have received a copy of the GNU General Public License 15# along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17# This file was written by Jeff Law. (law@cs.utah.edu) 18 19if { [prepare_for_testing return.exp "return"] } { 20 return -1 21} 22 23proc return_tests { } { 24 global gdb_prompt 25 26 27 if { ! [ runto func1 ] } then { return 0 } 28 29 gdb_test_multiple "return" "simple return" { 30 -re "Make .* return now.*y or n. $" { 31 send_gdb "y\n" 32 exp_continue 33 } 34 -re "func1 ..;.*$gdb_prompt $" { 35 send_gdb "step\n" 36 exp_continue 37 } 38 -re ".*in main after func1.*$gdb_prompt $" { 39 pass "simple return" 40 } 41 } 42 43 # Set breakpoints in other interesting functions. 44 gdb_test "break func2" ".*" "break func2" 45 gdb_test "break func3" ".*" "break func3" 46 47 gdb_test "continue" "return -5;" "continue to return of -5" 48 49 gdb_test_multiple "return 5" "return value 5" { 50 -re "Make .* return now.*y or n. $" { 51 send_gdb "y\n" 52 exp_continue 53 } 54 -re ".*tmp2 = func2.*$gdb_prompt $" { 55 # pass without comment 56 } 57 } 58 59 gdb_test "next" "tmp3 = func3.*" "next over call to func2" 60 61 gdb_test "p tmp2" ".* = 5" "correct value returned (integer test)" 62 63 gdb_test "continue" "return -5.0;" "continue to return of -5.0" 64 65 # Return of a double does not work for 68hc11 (need struct return 66 # in memory). 67 setup_xfail "m6811-*-*" 68 69 gdb_test_multiple "return 5.0" "return value 5.0" { 70 -re "Make .* return now.*y or n. $" { 71 send_gdb "y\n" 72 exp_continue 73 } 74 -re ".*tmp3 = func3.*$gdb_prompt $" { 75 # pass without comment 76 } 77 } 78 79 setup_xfail "m6811-*-*" 80 gdb_test "next" "printf.*" "next over call to func3" 81 82 # This test also fails for sparc Solaris 2.3 & 2.4, but passes under 2.5 83 # At the time the `next' is issued, the floating point unit for the 84 # process is not yet initialized, and the storing of the floating 85 # point value to the floating point return register is ignored. 86 # Xfail it for current versions that are known to fail. Presumably 87 # if some future version does initialize the floating point unit at 88 # process start, making this test pass, it will be for a version that 89 # is not xfailed. 90 91 setup_xfail "sparc-*-solaris2.3*" "sparc-*-solaris2.4*" "m6811-*-*" 92 if ![target_info exists gdb,skip_float_tests] { 93 gdb_test "p tmp3" ".* = 5.*" \ 94 "correct value returned double test (known problem with sparc solaris)" 95 } 96} 97 98set prev_timeout $timeout 99set timeout 30 100return_tests 101set timeout $prev_timeout 102