This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
What to do with extract/store floating()?
- To: gdb at sources dot redhat dot com
- Subject: What to do with extract/store floating()?
- From: Andrew Cagney <ac131313 at cygnus dot com>
- Date: Wed, 22 Aug 2001 22:46:13 -0400
Hello,
At present GDB has the functions:
DOUBLEST extract_floating (const void *in, int);
void store_floating (void *, int, DOUBLEST);
where that ``int'' parameter is the length of the floating-point value
being extracted/stored in bytes(1).
These functions then map that length onto a target type and from there
do a floating point conversion. This leads to a convoluted double flip:
gdbtypes.c:
TYPE_LENGTH(type) = TARGET_DOUBLE_BIT / TARGET_CHAR_BIT;
client code:
extract_floating (buf, TYPE_LENGTH (type));
doublest.c:
if (length == TARGET_DOUBLE_BIT / TARGET_CHAR_BIT)
..
Originally I was going to replace all these with:
floatformat_to_doublest()
and
floatformat_from_doublest()
however, in the light of the clarified meaning of ``struct type .
length'', that initial change would be wrong (it is the total size of
the type, the FP value is often smaller).
I'm now considering changing things to:
DOUBLEST extract_floating (const void *in, struct type *type);
void store_floating (void *, struct type *type, DOUBLEST);
store_floating(), for instance, would zero all TYPE_LENGTH(type) bytes
and then store DOUBLEST based on TYPE_FLOATFORMAT().
A variation on this (more incremental, less risk) would be to introduce
new functions with the above signatures (extract_doublest() and
store_doublest()?) and then deprecate the old extract_floating() and
store_floating() functions. A quick grep shows ~34 calls, 4 in core
code and one in stabsread.c!
Any preference? I've a patch for the middle option but I'm not sure how
correct it will be without testing.
Andrew
(1) Please don't ask if they are target or host bytes.