Fix wrong output of x87 registers due to truncation to double on amd64

When `info float` is used on an AMD64 system, GDB prints
floating-point values of x87 registers with raw contents like
0x361a867a8e0527397ce0 or 0xc4f988454a1ddd3cfdab wrongly.

This happens due to truncation to double, after which the former
becomes 0.0, and the latter becomes negative infinity.  This is caused
by failed detection of x86-64 host, which results in setting
gdb_host_{float,double,long_double}_format to zeros.

This commit fixes this misdetection, and adds a test to make sure
future commits don't introduce a regression here.

gdb/ChangeLog:
2015-12-09  Ruslan Kabatsayev  <b7.10110111@gmail.com>

	PR gdb/18702
	* configure.host: Fix detection of x86_64 host when setting
	floatformats.

gdb/testsuite/ChangeLog:
2015-12-09  Ruslan Kabatsayev  <b7.10110111@gmail.com>
	    Pedro Alves  <pedro@redhat.com>

	PR gdb/18702
	Add checking of floatformats setup on x86_64 hosts.
	* gdb.arch/i386-float.S (main): Load bigval and smallval.
	(smallval, bigval): New labels/constants.
	* gdb.arch/i386-float.exp: Use with_test_prefix and test "info
	float" after loading bigval and smallval.
This commit is contained in:
Ruslan Kabatsayev 2015-12-09 12:17:40 +00:00 committed by Pedro Alves
parent c192dad243
commit b593e3d9b0
5 changed files with 37 additions and 5 deletions

View file

@ -1,3 +1,9 @@
2015-12-09 Ruslan Kabatsayev <b7.10110111@gmail.com> (tiny patch)
PR gdb/18702
* configure.host: Fix detection of x86_64 host when setting
floatformats.
2015-12-08 Pierre-Marie de Rodat <derodat@adacore.com>
* NEWS: Announce this enhancement and the corresponding new

View file

@ -195,7 +195,7 @@ esac
# "double" and "long double" types.
case "${host}" in
i[34567]86-*-*)
i[34567]86-*-*|x86_64-*-*)
gdb_host_float_format="&floatformat_ieee_single_little"
gdb_host_double_format="&floatformat_ieee_double_little"
gdb_host_long_double_format="&floatformat_i387_ext"

View file

@ -1,3 +1,13 @@
2015-12-09 Ruslan Kabatsayev <b7.10110111@gmail.com>
Pedro Alves <pedro@redhat.com>
PR gdb/18702
Add checking of floatformats setup on x86_64 hosts.
* gdb.arch/i386-float.S (main): Load bigval and smallval.
(smallval, bigval): New labels/constants.
* gdb.arch/i386-float.exp: Use with_test_prefix and test "info
float" after loading bigval and smallval.
2015-12-07 Pierre-Marie de Rodat <derodat@adacore.com>
* gdb.ada/fun_overload_menu.exp: New testcase.

View file

@ -29,6 +29,10 @@
SYMBOL(main):
fninit
fldt val
fldt bigval
fldt smallval
ret
.data
val: .byte 0x00,0x00,0x45,0x07,0x11,0x19,0x22,0xe9,0xfe,0xbf
smallval: .byte 0xe9,0xd0,0xd7,0x65,0x81,0xb7,0x43,0xc6,0x5c,0x6a
bigval: .byte 0x6a,0x45,0x90,0xdc,0x03,0xc1,0xf8,0xc6,0xe5,0x03

View file

@ -37,7 +37,19 @@ if ![runto_main] then {
return 0
}
gdb_test "stepi" ".*fldt.*" "first stepi"
gdb_test "info float" ".*R7: Empty 0x00000000000000000000\r\n.*"
gdb_test "stepi" ".*ret.*" "second stepi"
gdb_test "info float" ".*=>R7: Valid 0xbffee922191107450000 .*"
with_test_prefix "zero" {
gdb_test "stepi" ".*fldt.*"
gdb_test "info float" "R7: Empty 0x00000000000000000000\r\n.*"
}
with_test_prefix "val" {
gdb_test "stepi" ".*fldt.*"
gdb_test "info float" "=>R7: Valid 0xbffee922191107450000 .*"
}
with_test_prefix "smallval" {
gdb_test "stepi" ".*fldt.*"
gdb_test "info float" "=>R6: Valid 0x03e5c6f8c103dc90456a \\+3.500000000000000007e-4632\r\n.*"
}
with_test_prefix "bigval" {
gdb_test "stepi" ".*ret.*"
gdb_test "info float" "=>R5: Valid 0x6a5cc643b78165d7d0e9 \\+7.250000000000000005e\\+3264\r\n.*"
}