convert_doublest_to_floatformat: handle off-range values.
authorJoel Brobecker <brobecker@gnat.com>
Wed, 25 Jul 2012 18:27:21 +0000 (18:27 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 25 Jul 2012 18:27:21 +0000 (18:27 +0000)
commit33d7655bb2b3cc12ac5401ae107a0aca33085d6e
treea45a8f48f08d796940de8a83d903bde13a7f1f12
parenta22d44ff78d262f07f777bc57098574da5afb827
convert_doublest_to_floatformat: handle off-range values.

On x86_64-linux targetting AVR, we see the following issues:

    (gdb) print 1.6e+308
    $1 = 0.89002949
    (gdb) print 1.6e-308
    $3 = 2.87630892

What happens is that GDB is trying to convert the value it read
(as a host "long double") into a target "double" value. The routine
performing the conversion does not realize that 1.6e+308 is just
too large to fit in a double. Similarly, it does not notice that
1.6e-308 is too small to be represented.

This patch enhances convert_doublest_to_floatformat to both handle
floats that are too small and too large.

gdb/ChangeLog:

        * doublest.c (convert_doublest_to_floatformat): If the exponent
        is too small, treat the value as zero.  If the exponent is too
        large, treat the value as infinity.
gdb/ChangeLog
gdb/doublest.c