61ff14c69a
* 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.
61 lines
2.2 KiB
Text
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
|
|
}
|
|
}
|