[gdb/testsuite] Fix gdb.ada/float-bits.exp with -m32

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.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29041
This commit is contained in:
Tom de Vries
2022-04-15 18:01:07 +02:00
parent 04f521a6ef
commit f0072f79e1

View File

@@ -42,12 +42,29 @@ gdb_test "print val_double := 16lf#bc0d83c94fb6d2ac#" " = -2.0e-19"
gdb_test "print val_double" " = -2.0e-19" \ gdb_test "print val_double" " = -2.0e-19" \
"print val_double after assignment" "print val_double after assignment"
gdb_test "print 16llf#7FFFF7FF4054A56FA5B99019A5C8#" " = 5.0e\\+25" set 16llf_supported 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
}
}
if { $16llf_supported } {
gdb_test "print 16llf#7FFFF7FF4054A56FA5B99019A5C8#" " = 5.0e\\+25"
}
gdb_test "print val_long_double" " = 5.0e\\+25" gdb_test "print val_long_double" " = 5.0e\\+25"
gdb_test "print val_long_double := 16llf#7FFFF7FF4054A56FA5B99019A5C8#" \ if { $16llf_supported } {
" = 5.0e\\+25" gdb_test "print val_long_double := 16llf#7FFFF7FF4054A56FA5B99019A5C8#" \
" = 5.0e\\+25"
}
gdb_test "print val_long_double" " = 5.0e\\+25" \ gdb_test "print val_long_double" " = 5.0e\\+25" \
"print val_long_double after assignment" "print val_long_double after assignment"
gdb_test "print 16llf#a56fa5b99019a5c800007ffff7ff4054#" \ if { $16llf_supported } {
" = <invalid float value>" gdb_test "print 16llf#a56fa5b99019a5c800007ffff7ff4054#" \
" = <invalid float value>"
}