From: Luis Machado via Gdb-patches <gdb-patches@sourceware.org>
To: Tom de Vries <tdevries@suse.de>, gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: Re: [PATCH][gdb/testsuite] Fix gdb.ada/float-bits.exp with -m32
Date: Tue, 3 May 2022 12:09:44 +0100 [thread overview]
Message-ID: <d4ce08bc-ee5e-d4fa-682d-782ae87d2e30@arm.com> (raw)
In-Reply-To: <4abe9008-4a35-8e14-0f6e-2cddd3964f83@suse.de>
On 5/3/22 11:54, Tom de Vries wrote:
> On 5/3/22 08:47, Luis Machado wrote:
>> On 5/2/22 08:10, Tom de Vries wrote:
>>> On 4/25/22 12:31, Luis Machado wrote:
>>>> On 4/14/22 14:14, Tom de Vries via Gdb-patches wrote:
>>>>> Hi,
>>>>>
>>>>> With test-case gdb.ada/float-bits.exp and native we get:
>>>>> ...
>>>>> (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M
>>>>> $9 = 5.0e+25^M
>>>>> (gdb) PASS: gdb.ada/float-bits.exp: print
>>>>> 16llf#7FFFF7FF4054A56FA5B99019A5C8#
>>>>> ...
>>>>> but with target board unix/-m32 we have instead:
>>>>> ...
>>>>> (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M
>>>>> Cannot export value 2596145952482202326224873165792712 as 96-bits \
>>>>> unsigned integer (must be between 0 and
>>>>> 79228162514264337593543950335)^M
>>>>> (gdb) FAIL: gdb.ada/float-bits.exp: print
>>>>> 16llf#7FFFF7FF4054A56FA5B99019A5C8#
>>>>> ...
>>>>>
>>>>> Fix this by testing whether 16llf is supported by doing ptype
>>>>> long_long_float
>>>>> which gets us either:
>>>>> ...
>>>>> type = <16-byte float>^M
>>>>> ...
>>>>> or:
>>>>> ...
>>>>> type = <12-byte float>^M
>>>>> ...
>>>>>
>>>>> Tested on x86_64-linux with native and unix/-m32.
>>>>
>>>> Unfortunately not all targets support 128-bit long doubles. For arm
>>>> and aarch64 the compiler won't generate a 128-bit float, but a
>>>> 64-bit float, so the 16ll tests won't be meaningful.
>>>>
>>>
>>> Right, but I'd expect those tests are skipped because 16llf_supported
>>> is 0 for 64-bit long double.
>>
>> They are skipped, but the testcase still assumes some 16llf tests can
>> be executed:
>>
>> gdb_test "print val_long_double" " = 5.0e\\+25"
>>
>> gdb_test "print val_long_double" " = 5.0e\\+25" \
>> "print val_long_double after assignment"
>>
>
> Ah, I see, you mean the val_long_double tests that do not use 16llf.
>
>> The above couple tests won't work correctly, as you're trying to force
>> a 128-bit value into a 64-bit variable.
>>>
>>>> FAIL: gdb.ada/float-bits.exp: print val_long_double
>>>> FAIL: gdb.ada/float-bits.exp: print val_long_double after assignment
>>>>
>>>
>>> Can you show me the actual failure mode, that is, copy from gdb.log
>>> instead of gdb.sum? I'm surprised that these fail because AFAICT,
>>> the used constant: 5.0e+25 is exactly representable in 64-bit ieee (
>>> I used https://babbage.cs.qc.cuny.edu/ieee-754.old/decimal.html to
>>> check this ).
>>
>> Sure, here it is:
>>
>> print val_long_double
>> $9 = 5.0000000000000002e+25
>> (gdb) FAIL: gdb.ada/float-bits.exp: print val_long_double
>> print val_long_double
>> $10 = 5.0000000000000002e+25
>> (gdb) FAIL: gdb.ada/float-bits.exp: print val_long_double after
>> assignment
>>
>>>
>
> I see. I can reproduce this using reproducer patch posted below, which
> gives me:
> ...
> (gdb) print val_double_2^M
> $9 = 5.0000000000000002e+25^M
> (gdb) print /x val_double_2^M
> $10 = 0x4544adf4b7320335^M
> (gdb)
> ...
>
> So, I realize now that my statement about it being exactly representable
> was incorrect, it's represented as 2^85 * 1.2924697071141058. I was
> thrown off by the website presenting me a crisp '5.0000000000000000e+25'
> as the value, but that's just one way to print it, and glibc evidently
> uses a different rounding in printing, which is allowed AFAICT, as per
> 'The low-order digit shall be rounded in an implementation-defined manner'.
>
> So I suppose we could just accept
> " = (5.0e\+25|5.000000000000000\de\+25)"
> for 64-bits long double.
>
>>>> I wonder if it would be best to bail out as soon as we find out the
>>>> target has no support for 128-bit floats. I can write a patch for that.
>>>>
>>>
>>> With a rewrite like this:
>>> ...
>>> -set 16llf_supported 0
>>> +set long_double_bytes 0
>>> gdb_test_multiple "ptype long_long_float" "" {
>>> - -re -wrap "<16-byte float>" {
>>> - set 16llf_supported 1
>>> - pass $gdb_test_name
>>> - }
>>> - -re -wrap "<\\d+-byte float>" {
>>> - pass $gdb_test_name
>>> + -re -wrap "<\(\\d+\)-byte float>" {
>>> + set long_double_bytes $expect_out(1,string)
>>> }
>>> }
>>>
>>> +set 16llf_supported [expr $long_double_bytes >= 16]
>>> ...
>>> we can formulate the precondition for any test in terms number of
>>> long double bytes.
>>
>> I've sent a patch to make this test a bit more generic:
>> https://sourceware.org/pipermail/gdb-patches/2022-April/188440.html
>>
>> Did you see it?
>>
>
> I did not, I've just come back from vacation and am still working
> through my inbox (and you didn't post the patch in reply to this thread,
> or cc-ed me, or updated this thread with a reference-to-post, any of
> which would mean I would have some pointer in my inbox) . I'll take a
> look.
>
No worries. I assumed so. It's just that I decided to go ahead and
improve the test somewhat, and the improvement seemed beyond what this
patch touched.
prev parent reply other threads:[~2022-05-03 11:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-14 13:14 Tom de Vries via Gdb-patches
2022-04-15 15:30 ` Tom Tromey via Gdb-patches
2022-04-25 10:31 ` Luis Machado via Gdb-patches
2022-05-02 7:10 ` Tom de Vries via Gdb-patches
2022-05-03 6:47 ` Luis Machado via Gdb-patches
2022-05-03 10:54 ` Tom de Vries via Gdb-patches
2022-05-03 11:09 ` Luis Machado via Gdb-patches [this message]
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=d4ce08bc-ee5e-d4fa-682d-782ae87d2e30@arm.com \
--to=gdb-patches@sourceware.org \
--cc=luis.machado@arm.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