* valprint.c (print_floating): Allow non TYPE_CODE_FLT types.
Restore behavour broken by 2002-01-20 Andrew Cagney <ac131313@redhat.com> IEEE_FLOAT removal.
This commit is contained in:
parent
acf5ed49a0
commit
a73c86fb73
@ -1,3 +1,9 @@
|
|||||||
|
2002-02-03 Andrew Cagney <ac131313@redhat.com>
|
||||||
|
|
||||||
|
* valprint.c (print_floating): Allow non TYPE_CODE_FLT types.
|
||||||
|
Restore behavour broken by 2002-01-20 Andrew Cagney
|
||||||
|
<ac131313@redhat.com> IEEE_FLOAT removal.
|
||||||
|
|
||||||
2002-02-03 Daniel Jacobowitz <drow@mvista.com>
|
2002-02-03 Daniel Jacobowitz <drow@mvista.com>
|
||||||
|
|
||||||
* c-valprint.c (c_val_print): Pass a proper valaddr to
|
* c-valprint.c (c_val_print): Pass a proper valaddr to
|
||||||
|
@ -540,18 +540,21 @@ longest_to_int (LONGEST arg)
|
|||||||
return (rtnval);
|
return (rtnval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print a floating point value of type TYPE, pointed to in GDB by
|
/* Print a floating point value of type TYPE (not always a
|
||||||
VALADDR, on STREAM. */
|
TYPE_CODE_FLT), pointed to in GDB by VALADDR, on STREAM. */
|
||||||
|
|
||||||
void
|
void
|
||||||
print_floating (char *valaddr, struct type *type, struct ui_file *stream)
|
print_floating (char *valaddr, struct type *type, struct ui_file *stream)
|
||||||
{
|
{
|
||||||
DOUBLEST doub;
|
DOUBLEST doub;
|
||||||
int inv;
|
int inv;
|
||||||
const struct floatformat *fmt = floatformat_from_type (type);
|
const struct floatformat *fmt = NULL;
|
||||||
unsigned len = TYPE_LENGTH (type);
|
unsigned len = TYPE_LENGTH (type);
|
||||||
|
|
||||||
if (floatformat_is_nan (fmt, valaddr))
|
/* If it is a floating-point, check for obvious problems. */
|
||||||
|
if (TYPE_CODE (type) == TYPE_CODE_FLT)
|
||||||
|
fmt = floatformat_from_type (type);
|
||||||
|
if (fmt != NULL && floatformat_is_nan (fmt, valaddr))
|
||||||
{
|
{
|
||||||
if (floatformat_is_negative (fmt, valaddr))
|
if (floatformat_is_negative (fmt, valaddr))
|
||||||
fprintf_filtered (stream, "-");
|
fprintf_filtered (stream, "-");
|
||||||
@ -563,12 +566,14 @@ print_floating (char *valaddr, struct type *type, struct ui_file *stream)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: cagney/2002-01-15: The simpler extract_typed_floating()
|
/* NOTE: cagney/2002-01-15: The TYPE passed into print_floating()
|
||||||
routine could be used here only that routine has no way of
|
isn't necessarily a TYPE_CODE_FLT. Consequently, unpack_double
|
||||||
indicating that the floating point it extracted was invalid (As
|
needs to be used as that takes care of any necessary type
|
||||||
indicated by INVALID_FLOAT). Instead, this code here could call
|
conversions. Such conversions are of course direct to DOUBLEST
|
||||||
something like floating_invalid() to check for an invalid
|
and disregard any possible target floating point limitations.
|
||||||
floating point. */
|
For instance, a u64 would be converted and displayed exactly on a
|
||||||
|
host with 80 bit DOUBLEST but with loss of information on a host
|
||||||
|
with 64 bit DOUBLEST. */
|
||||||
|
|
||||||
doub = unpack_double (type, valaddr, &inv);
|
doub = unpack_double (type, valaddr, &inv);
|
||||||
if (inv)
|
if (inv)
|
||||||
@ -580,9 +585,10 @@ print_floating (char *valaddr, struct type *type, struct ui_file *stream)
|
|||||||
/* FIXME: kettenis/2001-01-20: The following code makes too much
|
/* FIXME: kettenis/2001-01-20: The following code makes too much
|
||||||
assumptions about the host and target floating point format. */
|
assumptions about the host and target floating point format. */
|
||||||
|
|
||||||
/* FIXME: cagney/2002-01-15: The floatformat pointed to by FMT
|
/* NOTE: cagney/2002-02-03: Since the TYPE of what was passed in may
|
||||||
should contain all the information needed to print the
|
not necessarially be a TYPE_CODE_FLT, the below ignores that and
|
||||||
floating-point value without host dependencies. */
|
instead uses the type's length to determine the precision of the
|
||||||
|
floating-point value being printed. */
|
||||||
|
|
||||||
if (len < sizeof (double))
|
if (len < sizeof (double))
|
||||||
fprintf_filtered (stream, "%.9g", (double) doub);
|
fprintf_filtered (stream, "%.9g", (double) doub);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user