Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Joel Brobecker via Gdb-patches <gdb-patches@sourceware.org>
To: Tom de Vries <tdevries@suse.de>
Cc: Tom Tromey <tom@tromey.com>,
	Joel Brobecker <brobecker@adacore.com>,
	gdb-patches@sourceware.org
Subject: Re: [PATCH][gdb/testsuite] Fix gdb.ada/literals.exp with aarch64
Date: Wed, 27 Jul 2022 10:06:58 -0700	[thread overview]
Message-ID: <YuFwsj0dSgtb1pLh@adacore.com> (raw)
In-Reply-To: <20220727103447.GA9310@delia>

Hi Tom,

> On aarch64-linux, I run into:
> ...
> (gdb) print 16#ffffffffffffffff#^M
> $7 = 18446744073709551615^M
> (gdb) FAIL: gdb.ada/literals.exp: print 16#ffffffffffffffff#
> ...
> while on x86_64-linux instead, I get:
> ...
> (gdb) print 16#ffffffffffffffff#^M
> $7 = -1^M
> (gdb) PASS: gdb.ada/literals.exp: print 16#ffffffffffffffff#
> ...
> 
> We can easily reproduce this on x86_64-linux using:
> ...
> $ gdb -q -batch -ex "set lang ada" -ex "set arch i386" \
>   -ex "print 16#ffffffffffffffff#"
> $1 = -1
> $ gdb -q -batch -ex "set lang ada" -ex "set arch aarch64" \
>   -ex "print 16#ffffffffffffffff#"
> $1 = 18446744073709551615
> ...
> 
> With i386, we have:
> ...
> (gdb) p int_bits
> $3 = 32
> (gdb) p long_bits
> $4 = 32
> (gdb) p long_long_bits
> $5 = 64
> ...
> and so in processInt we hit the fits-in-unsigned-long-long case where we use
> as type long long:
> ...
>       /* Note: Interprets ULLONG_MAX as -1.  */
>       yylval.typed_val.type = type_long_long (par_state);
> ...
> 
> With aarch64, we have instead:
> ...
> (gdb) p int_bits
> $1 = 32
> (gdb) p long_bits
> $2 = 64
> (gdb) p long_long_bits
> $3 = 64
> ...
> and so in processInt we hit the fits-in-unsigned-long case where we use
> as type unsigned long:
> ...
>       yylval.typed_val.type
>         = builtin_type (par_state->gdbarch ())->builtin_unsigned_long;
> ...
> 
> Fix this by updating the test-case to accept 18446744073709551615 as well.
> 
> Tested on x86_64-linux and aarch64-linux.
> 
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29416
> 
> Any comments?

Thanks for the patch.

My question is whether it actually makes sense that -1 be
a valid output for the print command above. I tried the addition
of ...

    | /* Note: Interprets ULLONG_MAX as -1.  */
    | yylval.typed_val.type = type_long_long (par_state);

... to a patch of yours:

    | commit ac3afe36d73c84096685fece885d70b28bc9629f
    | Author: Tom de Vries <tdevries@suse.de>
    | Date:   Sat Jun 4 13:17:33 2022 +0200
    | Subject: [gdb/ada] Fix literal truncation
    |
    | Make sure we error out on overflow instead of truncating in all cases.
    |
    | Tested on x86_64-linux, with a build with --enable-targets=all.

Do you remember why we do this? Intuitively, you'd expect that GDB
would behave the same regardless of whether it selects type "long"
or "long long" for its processing, as long as both types are 64-bit.

With the above, we can take this patch as an intermediate remedy,
but I think we might need to dig deeper into why we use a signed
type in the case of long long but not long, particularly when both
types are the same size.

WDYT?

> ---
>  gdb/testsuite/gdb.ada/literals.exp | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gdb/testsuite/gdb.ada/literals.exp b/gdb/testsuite/gdb.ada/literals.exp
> index a6ac89b540f..744a6bc573c 100644
> --- a/gdb/testsuite/gdb.ada/literals.exp
> +++ b/gdb/testsuite/gdb.ada/literals.exp
> @@ -36,4 +36,4 @@ gdb_test "print 16#f#e1" " = 240"
>  gdb_test "print 16#1#e10" " = 1099511627776"
>  
>  gdb_test "print/x 16#7fffffffffffffff#" " = 0x7fffffffffffffff"
> -gdb_test "print 16#ffffffffffffffff#" " = -1"
> +gdb_test "print 16#ffffffffffffffff#" " = (-1|18446744073709551615)"

-- 
Joel

  parent reply	other threads:[~2022-07-27 17:07 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-27 10:34 Tom de Vries via Gdb-patches
2022-07-27 13:31 ` Luis Machado via Gdb-patches
2022-07-27 17:06 ` Joel Brobecker via Gdb-patches [this message]
2022-07-27 21:03   ` Tom de Vries via Gdb-patches
2022-07-28 13:10     ` Joel Brobecker via Gdb-patches
2022-07-28 14:21       ` Tom de Vries via Gdb-patches
2022-07-28 16:28         ` Joel Brobecker via Gdb-patches
2022-07-29 22:24         ` Joel Brobecker via Gdb-patches

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=YuFwsj0dSgtb1pLh@adacore.com \
    --to=gdb-patches@sourceware.org \
    --cc=brobecker@adacore.com \
    --cc=tdevries@suse.de \
    --cc=tom@tromey.com \
    /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