old-cross-binutils/gdb/testsuite/gdb.base/return-nodebug.exp
Jan Kratochvil 61ff14c69a gdb/
* stack.c (return_command <retval_exp>): New variables retval_expr
	and old_chain.  Inline parse_and_eval to initialize retval_expr.  Check
	RETVAL_EXPR for UNOP_CAST and set RETURN_TYPE to the RETURN_VALUE type
	if RETURN_TYPE is NULL.

gdb/doc/
	* gdb.texinfo (Returning): New description for missing debug info.

gdb/testsuite/
	* gdb.base/return-nodebug.exp, gdb.base/return-nodebug.c: New.
2009-03-15 09:19:40 +00:00

61 lines
2.2 KiB
Text

# Copyright (C) 2009 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/>.
proc do_test {type} {
set typenospace [string map {{ } -} $type]
global pf_prefix
set old_prefix $pf_prefix
lappend pf_prefix "$typenospace:"
if {[runto "func"]} {
# Verify that we do not crash when using "return" from a function with
# no debugging info. Such function has no `struct symbol'. It may
# still have an associated `struct minimal_symbol'.
gdb_test "return -1" \
"Return value type not available for selected stack frame\\.\r\nPlease use an explicit cast of the value to return\\." \
"return from function with no debug info without a cast"
# Cast of the result to the proper width must be done explicitely.
gdb_test "return ($type) -1" "#0 .* main \\(.*" \
"return from function with no debug info with a cast" \
"Make selected stack frame return now\\? \\(y or n\\) " "y"
# And if it returned the full width of the result.
gdb_test "adv marker" "\r\nresult=-1\r\n.* in marker \\(.*" \
"full width of the returned result"
}
set pf_prefix $old_prefix
}
foreach case {{{signed char} %d (int)} \
{{short} %d (int)} \
{{int} %d} \
{{long} %ld} \
{{long long} %lld}} {
set type [lindex $case 0]
set format [lindex $case 1]
set cast [lindex $case 2]
set typeesc [string map {{ } {\ }} $type]
set typenospace [string map {{ } -} $type]
if {[prepare_for_testing return-nodebug.exp "return-nodebug-$typenospace" "return-nodebug.c" \
[list "additional_flags=-DFORMAT=\"$format\" -DTYPE=$typeesc -DCAST=$cast"]] == 0} {
do_test $type
}
}