From: "Pierre Muller" <muller@ics.u-strasbg.fr>
To: "'Jan Kratochvil'" <jan.kratochvil@redhat.com>,
"'Mark Kettenis'" <mark.kettenis@xs4all.nl>
Cc: <drow@false.org>, <gdb-patches@sourceware.org>
Subject: RE: [patch] Fix `return' of long/long-long results with no debuginfo
Date: Thu, 12 Feb 2009 14:36:00 -0000 [thread overview]
Message-ID: <001e01c98d1f$38baab30$aa300190$@u-strasbg.fr> (raw)
In-Reply-To: <20090212094134.GA26915@host0.dyn.jankratochvil.net>
Concerning the test,
wouldn't it be better to set the return value to
another value than the one that is normally
returned by the function?
This would allow to FAIL on targets
where the substitution fails and the program
is just continued...
Just use some other value in func definition,
for instance
+static TYPE
+func (void)+{
+ return (TYPE) 31;
+}
I checked your patch, because I was worried
about the weird syntax
and thought that this would fail
on my old cygwin dejagnu, but it does
give me 10 PASS, even with the above modification.
Pierre Muller
Pascal language support maintainer for GDB
> -----Message d'origine-----
> De : gdb-patches-owner@sourceware.org [mailto:gdb-patches-
> owner@sourceware.org] De la part de Jan Kratochvil
> Envoyé : Thursday, February 12, 2009 10:42 AM
> À : Mark Kettenis
> Cc : drow@false.org; gdb-patches@sourceware.org
> Objet : Re: [patch] Fix `return' of long/long-long results with no
> debuginfo
>
> On Wed, 11 Feb 2009 23:44:21 +0100, Mark Kettenis wrote:
> > Thinking a bit more of this now, things all depend on the calling
> > convention. I'm not convinced casting to `long long' is safe in all
> > cases, especially on 32-bit big-endian machines. It really might do
> > the wrong thing there, exposing garbage or the wrong 32 bits of the
> > 64-bit value.
> >
> > The 'int' case is really special in a sense, very much because of the
> > K&R heritage. It has to work for all types that are sizeof(int) or
> > smaller.
>
> OK to check-in this patch?
>
> Regression-tested on x86_64-unknown-linux-gnu.
>
>
> Thanks,
> Jan
>
>
> gdb/
> 2009-02-12 Mark Kettenis <kettenis@gnu.org>
>
> * stack.c (return_command): Returned type for functions with no
> debug
> info is now the type of user specified expression.
>
> gdb/testsuite/
> 2009-02-12 Jan Kratochvil <jan.kratochvil@redhat.com>
>
> * gdb.base/return-nodebug.exp, gdb.base/return-nodebug.c: New.
>
> --- gdb/stack.c 11 Feb 2009 16:07:28 -0000 1.185
> +++ gdb/stack.c 12 Feb 2009 09:24:18 -0000
> @@ -1806,6 +1806,8 @@ return_command (char *retval_exp, int fr
> the cast fail, this call throws an error. */
> if (thisfun != NULL)
> return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
> + else
> + return_type = value_type (return_value);
> if (return_type == NULL)
> return_type = builtin_type (get_frame_arch (thisframe))-
> >builtin_int;
> CHECK_TYPEDEF (return_type);
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb/testsuite/gdb.base/return-nodebug.c 12 Feb 2009 09:24:18 -
> 0000
> @@ -0,0 +1,40 @@
> +/* 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
> +func (void)
> +{
> + return (TYPE) -1;
> +}
> +
> +static void
> +marker (void)
> +{
> +}
> +
> +int
> +main (void)
> +{
> + printf ("result=" FORMAT "\n", CAST func ());
> +
> + /* Cannot `next' with no debug info. */
> + marker ();
> +
> + return 0;
> +}
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ gdb/testsuite/gdb.base/return-nodebug.exp 12 Feb 2009 09:24:18 -
> 0000
> @@ -0,0 +1,55 @@
> +# 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"]} {
> + # Test return from a function with no debug info (symbol; still
> it may
> + # have a minimal-symbol) if it does not crash.
> + # 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" \
> + "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 {{{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
> + }
> +}
next prev parent reply other threads:[~2009-02-12 14:36 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-11 19:45 Jan Kratochvil
2009-02-11 20:40 ` Mark Kettenis
2009-02-11 20:50 ` Daniel Jacobowitz
2009-02-11 21:23 ` Mark Kettenis
2009-02-11 21:47 ` Jan Kratochvil
2009-02-11 21:58 ` Mark Kettenis
2009-02-11 22:08 ` Jan Kratochvil
2009-02-11 22:38 ` Mark Kettenis
2009-02-11 22:50 ` Jan Kratochvil
2009-03-03 18:10 ` Tom Tromey
2009-03-04 21:29 ` Mark Kettenis
2009-03-05 0:15 ` Tom Tromey
2009-03-09 1:55 ` Jan Kratochvil
2009-03-09 22:38 ` Mark Kettenis
2009-03-11 16:49 ` Joel Brobecker
2009-03-11 20:23 ` Tom Tromey
2009-03-11 21:48 ` Joel Brobecker
2009-03-13 19:50 ` Jan Kratochvil
2009-03-13 23:00 ` Joel Brobecker
2009-03-14 10:45 ` Eli Zaretskii
2009-03-14 22:09 ` Jan Kratochvil
2009-03-14 22:18 ` Eli Zaretskii
2009-03-15 9:22 ` Joel Brobecker
2009-03-15 18:15 ` Jan Kratochvil
2009-03-18 4:36 ` Pedro Alves
2009-03-18 14:44 ` Joel Brobecker
2009-03-18 15:39 ` Jan Kratochvil
2009-03-18 15:46 ` Pedro Alves
2009-02-11 22:44 ` Mark Kettenis
2009-02-12 9:41 ` Jan Kratochvil
2009-02-12 14:36 ` Pierre Muller [this message]
2009-02-12 14:44 ` Jan Kratochvil
2009-02-14 21:59 ` Mark Kettenis
2009-02-21 12:47 ` Jan Kratochvil
2009-02-21 13:44 ` Mark Kettenis
2009-02-21 15:58 ` Jan Kratochvil
2009-02-21 16:21 ` Mark Kettenis
2009-02-21 16:32 ` Jan Kratochvil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='001e01c98d1f$38baab30$aa300190$@u-strasbg.fr' \
--to=muller@ics.u-strasbg.fr \
--cc=drow@false.org \
--cc=gdb-patches@sourceware.org \
--cc=jan.kratochvil@redhat.com \
--cc=mark.kettenis@xs4all.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox