mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 02:53:48 +08:00
b593e3d9b0
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.
219 lines
5.8 KiB
Plaintext
219 lines
5.8 KiB
Plaintext
# Mapping of configurations into GDB host definitions. This is
|
|
# invoked from the autoconf generated configure script.
|
|
|
|
# This file sets the following shell variables:
|
|
# gdb_host_cpu generic name of host's CPU
|
|
# gdb_host name of GDB host definition to use
|
|
# gdb_host_float_format host's float floatformat, or 0
|
|
# gdb_host_double_format host's double floatformat, or 0
|
|
# gdb_host_long_double_format host's long double floatformat, or 0
|
|
# gdb_host_obs host-specific .o files to include
|
|
|
|
# Map host cpu into the config cpu subdirectory name.
|
|
# The default is $host_cpu.
|
|
|
|
case $host in
|
|
arm*-*-netbsdelf* | \
|
|
i[34567]86-*-netbsdelf* | \
|
|
m68*-*-netbsdelf* | \
|
|
sparc-*-netbsdelf* | \
|
|
vax-*-netbsdelf*)
|
|
;;
|
|
*-*-irix* | \
|
|
alpha*-*-osf* | \
|
|
arm*-*-netbsd* | \
|
|
hppa*-*-hiux* | \
|
|
i[34567]86-ncr-* | \
|
|
i[34567]86-*-dgux* | \
|
|
i[34567]86-*-lynxos* | \
|
|
i[34567]86-*-netbsd* | \
|
|
i[34567]86-*-openbsd[0-2].* | i[34567]86-*-openbsd3.[0-3] | \
|
|
i[34567]86-*-sco3.2v5* | \
|
|
i[34567]86-*-sco3.2v4* | \
|
|
i[34567]86-*-sco* | \
|
|
i[34567]86-*-sysv4.2* | \
|
|
i[34567]86-*-sysv4* | \
|
|
i[34567]86-*-sysv5* | \
|
|
i[34567]86-*-unixware2* | \
|
|
i[34567]86-*-unixware* | \
|
|
i[34567]86-*-sysv* | \
|
|
i[34567]86-*-isc* | \
|
|
m68*-*-netbsd* | \
|
|
sparc-*-netbsd* | \
|
|
rs6000-*-lynxos* | \
|
|
vax-*-bsd* | \
|
|
vax-*-netbsd* | \
|
|
vax-*-ultrix* | \
|
|
hppa*-*-hpux* | \
|
|
ia64-*-hpux* | \
|
|
null)
|
|
echo "*** Configuration $host is obsolete." >&2
|
|
echo "*** Support has been REMOVED." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
case "${host_cpu}" in
|
|
|
|
aarch64*) gdb_host_cpu=aarch64 ;;
|
|
alpha*) gdb_host_cpu=alpha ;;
|
|
arm*) gdb_host_cpu=arm ;;
|
|
hppa*) gdb_host_cpu=pa ;;
|
|
i[34567]86*) gdb_host_cpu=i386 ;;
|
|
m68*) gdb_host_cpu=m68k ;;
|
|
m88*) gdb_host_cpu=m88k ;;
|
|
mips*) gdb_host_cpu=mips ;;
|
|
powerpc* | rs6000) gdb_host_cpu=powerpc ;;
|
|
sparcv9 | sparc64) gdb_host_cpu=sparc ;;
|
|
s390*) gdb_host_cpu=s390 ;;
|
|
sh*) gdb_host_cpu=sh ;;
|
|
tilegx*) gdb_host_cpu=tilegx ;;
|
|
x86_64*) gdb_host_cpu=i386 ;;
|
|
m32r*) gdb_host_cpu=m32r ;;
|
|
xtensa*) gdb_host_cpu=xtensa ;;
|
|
*) gdb_host_cpu=$host_cpu ;;
|
|
|
|
esac
|
|
|
|
# map host info into gdb names.
|
|
|
|
case "${host}" in
|
|
|
|
*-*-darwin*) gdb_host=darwin ;;
|
|
|
|
aarch64*-*-linux*) gdb_host=linux ;;
|
|
|
|
alpha*-*-linux*) gdb_host=alpha-linux ;;
|
|
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
|
|
gdb_host=fbsd ;;
|
|
alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
|
|
gdb_host=nbsd ;;
|
|
alpha*-*-openbsd*) gdb_host=nbsd ;;
|
|
|
|
arm*-*-linux*) gdb_host=linux ;;
|
|
arm*-*-netbsdelf* | arm*-*-knetbsd*-gnu)
|
|
gdb_host=nbsdelf ;;
|
|
arm*-*-openbsd*) gdb_host=nbsdelf ;;
|
|
|
|
hppa*-*-linux*) gdb_host=linux ;;
|
|
hppa*-*-netbsd*) gdb_host=nbsd ;;
|
|
hppa*-*-openbsd*) gdb_host=obsd ;;
|
|
|
|
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
|
|
gdb_host=fbsd ;;
|
|
i[34567]86-*-netbsdelf* | i[34567]86-*-knetbsd*-gnu)
|
|
gdb_host=nbsdelf ;;
|
|
i[34567]86-*-go32*) gdb_host=go32 ;;
|
|
i[34567]86-*-mingw32*) gdb_host=mingw
|
|
gdb_host_obs=mingw-hdep.o
|
|
;;
|
|
i[34567]86-*-msdosdjgpp*) gdb_host=go32 ;;
|
|
i[34567]86-*-linux*) gdb_host=linux ;;
|
|
i[34567]86-*-gnu*) gdb_host=i386gnu ;;
|
|
i[3456]86-*-nto*) gdb_host=nto ;;
|
|
i[34567]86-*-openbsd*) gdb_host=obsd ;;
|
|
i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
|
|
gdb_host=sol2-64 ;;
|
|
i[34567]86-*-solaris*) gdb_host=i386sol2 ;;
|
|
i[34567]86-*-cygwin*) gdb_host=cygwin ;;
|
|
|
|
ia64-*-linux*) gdb_host=linux ;;
|
|
|
|
m68*-*-linux*) gdb_host=linux ;;
|
|
m68*-*-netbsdelf* | m68*-*-knetbsd*-gnu)
|
|
gdb_host=nbsdelf ;;
|
|
m68*-*-openbsd*) gdb_host=obsd ;;
|
|
|
|
m88*-*-openbsd*) gdb_host=obsd ;;
|
|
|
|
mips*-*-linux*) gdb_host=linux ;;
|
|
mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
|
|
gdb_host=nbsd ;;
|
|
mips64*-*-openbsd*) gdb_host=obsd64 ;;
|
|
|
|
powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
|
|
gdb_host=aix ;;
|
|
powerpc*-*-freebsd*) gdb_host=fbsd ;;
|
|
powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
|
|
gdb_host=nbsd ;;
|
|
powerpc-*-openbsd*) gdb_host=obsd ;;
|
|
|
|
powerpc64*-*-linux*) gdb_host=ppc64-linux
|
|
# Support 'pseudo-native' debugging on the Cell BE
|
|
if test "${target_cpu}" = "spu"; then
|
|
gdb_host=spu-linux
|
|
gdb_native=yes
|
|
fi
|
|
;;
|
|
powerpc*-*-linux*) gdb_host=linux ;;
|
|
|
|
s390*-*-linux*) gdb_host=linux ;;
|
|
|
|
sh*-*-netbsdelf* | sh*-*-knetbsd*-gnu)
|
|
gdb_host=nbsd ;;
|
|
sh*-*-openbsd*) gdb_host=nbsd ;;
|
|
|
|
sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu)
|
|
gdb_host=fbsd ;;
|
|
sparc-*-linux*) gdb_host=linux ;;
|
|
sparc64-*-linux*) gdb_host=linux64 ;;
|
|
sparc-*-netbsdelf* | sparc-*-knetbsd*-gnu)
|
|
gdb_host=nbsdelf ;;
|
|
sparc64-*-netbsd* | sparc64-*-knetbsd*-gnu)
|
|
gdb_host=nbsd64 ;;
|
|
sparc-*-openbsd*) gdb_host=nbsdelf ;;
|
|
sparc64-*-openbsd*) gdb_host=obsd64 ;;
|
|
sparc-*-solaris2* | sparcv9-*-solaris2* | sparc64-*-solaris2*)
|
|
gdb_host=sol2
|
|
;;
|
|
|
|
tilegx-*-linux*) gdb_host=linux ;;
|
|
|
|
vax-*-netbsdelf* | vax-*-knetbsd*-gnu)
|
|
gdb_host=nbsdelf ;;
|
|
vax-*-openbsd*) gdb_host=obsd ;;
|
|
|
|
x86_64-*-linux*) gdb_host=linux64 ;;
|
|
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
|
|
gdb_host=fbsd64 ;;
|
|
x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
|
|
gdb_host=nbsd64 ;;
|
|
x86_64-*-openbsd*) gdb_host=obsd64 ;;
|
|
x86_64-*-mingw*) gdb_host=mingw64
|
|
gdb_host_obs=mingw-hdep.o
|
|
;;
|
|
x86_64-*-cygwin*) gdb_host=cygwin64 ;;
|
|
m32r*-*-linux*) gdb_host=linux ;;
|
|
|
|
xtensa*-*-linux*) gdb_host=linux ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# Map the host/cpu onto the floatformat correspondong to C's "float",
|
|
# "double" and "long double" types.
|
|
|
|
case "${host}" in
|
|
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"
|
|
;;
|
|
hppa*-*-linux*)
|
|
gdb_host_float_format="&floatformat_ieee_single_big"
|
|
gdb_host_double_format="&floatformat_ieee_double_big"
|
|
gdb_host_long_double_format="&floatformat_ieee_double_big"
|
|
;;
|
|
m68*-*-*)
|
|
gdb_host_float_format="&floatformat_ieee_single_big"
|
|
gdb_host_double_format="&floatformat_ieee_double_big"
|
|
gdb_host_long_double_format="&floatformat_m68881_ext"
|
|
;;
|
|
*)
|
|
gdb_host_float_format=0
|
|
gdb_host_double_format=0
|
|
gdb_host_long_double_format=0
|
|
;;
|
|
esac
|