diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-03-15 09:19:40 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-03-15 09:19:40 +0000 |
commit | 61ff14c69a7cb2870f9dd2792690a1fbc8967f29 (patch) | |
tree | 0aa0c4e0aa58d9bcc89c2497e4d22c9197dc6eba /gdb/testsuite | |
parent | 30c665df3f6fb41cc4f9f342d03f4ec4d97a7a24 (diff) | |
download | gdb-61ff14c69a7cb2870f9dd2792690a1fbc8967f29.zip gdb-61ff14c69a7cb2870f9dd2792690a1fbc8967f29.tar.gz gdb-61ff14c69a7cb2870f9dd2792690a1fbc8967f29.tar.bz2 |
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.
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 14 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/return-nodebug.c | 49 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/return-nodebug.exp | 61 |
3 files changed, 119 insertions, 5 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b047421..e889d34 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-03-15 Jan Kratochvil <jan.kratochvil@redhat.com> + + * gdb.base/return-nodebug.exp, gdb.base/return-nodebug.c: New. + 2009-03-14 Jan Kratochvil <jan.kratochvil@redhat.com> Fix a racy FAIL. @@ -9,7 +13,7 @@ 2009-03-13 Vladimir Prus <vladimir@codesourcery.com> * gdb.mi/mi-cli.exp: Adjust for output difference in - sync and async modes. + sync and async modes. 2009-03-12 Joel Brobecker <brobecker@adacore.com> @@ -31,19 +35,19 @@ 2009-03-12 Vladimir Prus <vladimir@codesourcery.com> - * gdb.mi/mi-cli.exp: Remove debug print. + * gdb.mi/mi-cli.exp: Remove debug print. 2009-03-12 Vladimir Prus <vladimir@codesourcery.com> - * gdb.mi/mi-cli.exp: Verify that CLI commands that run inferior - include the token in ^running and frame info in *stopped. + * gdb.mi/mi-cli.exp: Verify that CLI commands that run inferior + include the token in ^running and frame info in *stopped. 2009-03-05 Paul Pluzhnikov <ppluzhnikov@google.com> * solib-display.exp: New file. * solib-display-main.c: New file. * solib-display-lib.c: New file. - + 2009-03-05 Pedro Alves <pedro@codesourcery.com> * gdb.arch/i386-permbkpt.S, gdb.arch/i386-permbkpt.exp: New. diff --git a/gdb/testsuite/gdb.base/return-nodebug.c b/gdb/testsuite/gdb.base/return-nodebug.c new file mode 100644 index 0000000..e1211b3 --- /dev/null +++ b/gdb/testsuite/gdb.base/return-nodebug.c @@ -0,0 +1,49 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 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/>. */ + +#include <stdio.h> + +static TYPE +init (void) +{ + return 0; +} + +static TYPE +func (void) +{ + return 31; +} + +static void +marker (void) +{ +} + +int +main (void) +{ + /* Preinitialize registers to 0 to avoid false PASS by leftover garbage. */ + init (); + + printf ("result=" FORMAT "\n", CAST func ()); + + /* Cannot `next' with no debug info. */ + marker (); + + return 0; +} diff --git a/gdb/testsuite/gdb.base/return-nodebug.exp b/gdb/testsuite/gdb.base/return-nodebug.exp new file mode 100644 index 0000000..7d43776 --- /dev/null +++ b/gdb/testsuite/gdb.base/return-nodebug.exp @@ -0,0 +1,61 @@ +# 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 + } +} |