From: Jeff Johnston <jjohnstn@redhat.com>
To: Andrew Cagney <cagney@gnu.org>
Cc: Michael Elizabeth Chastain <mec.gnu@mindspring.com>,
gdb@sources.redhat.com
Subject: Re: regression with huge integer
Date: Mon, 23 Feb 2004 22:25:00 -0000 [thread overview]
Message-ID: <403A7DEE.6090606@redhat.com> (raw)
In-Reply-To: <403A7132.9020902@gnu.org>
Andrew Cagney wrote:
>> gdb.stabs/weird.def has this huge integer:
>>
>> # 256-bit integer. The point is obviously not that GDB should have a
>> # special case for this size, but that an integer of any size should
>> # work (at least for printing in hex, not necessarily for
>> arithmetic. .stabs "int256var:G203=bu32;0;256;", N_GSYM,0,0, 0
>> # The value is palindromic, so it works whether words are big or little
>> # endian. .globl int256var
>> .data
>> .align_it
>> int256var:
>> .long 42
>> .long 0x2b, 0x2c, 0x2d, 0x2d, 0x2c, 0x2b, 0x2a
>>
>> gdb 6.0 can print this just fine:
>>
>> (gdb) print int256var
>> $1 = 0x0000002a0000002b0000002c0000002d0000002d0000002c0000002b0000002a
>
>
> That should be decimal :-/
>
>> (gdb) print /x int256var
>> $2 = 0x0000002a0000002b0000002c0000002d0000002d0000002c0000002b0000002a
>>
>> But with the recent simplification to print_scalar_formatted, gdb HEAD
>> says:
>>
>> (gdb) print int256var
>> $1 = 0x0000002a0000002b0000002c0000002d0000002d0000002c0000002b0000002a
>> (gdb) print /x int256var
>> $2 = That operation is not available on integers of more than 8 bytes.
>>
>> This causes a regression in the test results.
>
>
> Hmm, two steps forward, one step back.
>
>> I would like to just accept this output and change the test script.
>> Specifically, in gdb.stabs/weird.exp:
>>
>> # This big number needs to be kept as one piece
>> - gdb_test "p/x int256var" " =
>> 0x0*2a0000002b0000002c0000002d0000002d0000002c0000002b0000002a" "print
>> very big integer"
>> + gdb_test "print int256var" " =
>> 0x0*2a0000002b0000002c0000002d0000002d0000002c0000002b0000002a" "print
>> very big integer"
>> Is this a good idea? Or should I file a bug that "print /x" does
>> not work
>> in this case?
>
>
> Jeff and I looked at the problem.
>
> Given some sort of very large scalar _and_ a scalar format, I think GDB
> can correctly print it. Looking at the old 60 code, this:
>
> if (len > sizeof (LONGEST)
> && (format == 't'
> || format == 'c'
> || format == 'o'
> || format == 'u'
> || format == 'd'
> || format == 'x'))
> {
> if (!TYPE_UNSIGNED (type)
> || !extract_long_unsigned_integer (valaddr, len, &val_long))
> {
> /* We can't print it normally, but we can print it in hex.
> Printing it in the wrong radix is more useful than saying
> "use /x, you dummy". */
> /* FIXME: we could also do octal or binary if that was the
> desired format. */
> /* FIXME: we should be using the size field to give us a
> minimum field width to print. */
>
> if (format == 'o')
> print_octal_chars (stream, valaddr, len);
> else if (format == 'd')
> print_decimal_chars (stream, valaddr, len);
> else if (format == 't')
> print_binary_chars (stream, valaddr, len);
> else
> /* replace with call to print_hex_chars? Looks
> like val_print_type_code_int is redoing
> work. - edie */
>
> val_print_type_code_int (type, valaddr, stream);
>
> would just need to be seriously reduced to something like:
>
> if (len > sizeof (LONGEST)
> && some sort of scalar (TYPE)
> && some sort of scalar (FORMAT))
> if (format == ..)
> print_FORMAT_chars (...);
> ...
> else if (format == 'x')
> print_hex_chars (...);
> else
> we've botched it -- don't call val_print_type_code_int
>
> where each format is explicitly handled. ...
>
> The only one that appears to be missing is 'c', and there something very
> similar to print_hex_chars would do the trick (using LA_EMIT_CHAR).
>
> It might even, eventually, be possible to simplify this code to the
> point where all scalar formatted scalars are always printed directly
> from their byte buffer (no unpack longest call).
>
> Andrew
>
>
>
I'll start working on a patch and submit it for review.
-- Jeff J.
next prev parent reply other threads:[~2004-02-23 22:25 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-23 19:55 Michael Elizabeth Chastain
2004-02-23 20:44 ` Andreas Schwab
2004-02-23 21:27 ` Mark Kettenis
2004-02-23 21:31 ` Andrew Cagney
2004-02-23 22:25 ` Jeff Johnston [this message]
2004-02-26 22:16 ` [RFA]: Patch for " Jeff Johnston
2004-02-26 23:09 ` Andrew Cagney
2004-02-26 23:17 ` Daniel Jacobowitz
2004-02-26 23:48 ` Jeff Johnston
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=403A7DEE.6090606@redhat.com \
--to=jjohnstn@redhat.com \
--cc=cagney@gnu.org \
--cc=gdb@sources.redhat.com \
--cc=mec.gnu@mindspring.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