This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
[PATCH] utils.c changes
- To: gdb-patches at sourceware dot cygnus dot com
- Subject: [PATCH] utils.c changes
- From: Kevin Buettner <kevinb at cygnus dot com>
- Date: Mon, 20 Mar 2000 15:21:59 -0700
I've just committed the patch below. (Thanks to David Taylor for promptly
reviewing these changes.)
* utils.c (floatformat_from_doublest): Don't assume that a long
will be exactly 32 bits in length. Also... make sure space
that we're writing the float to is completely initialized to
zeroes, even when the number of bits in the float is not
evenly divisible by FLOATFORMAT_CHAR_BIT.
Index: utils.c
===================================================================
RCS file: /cvs/src/src/gdb/utils.c,v
retrieving revision 1.4
diff -u -p -r1.4 utils.c
--- utils.c 2000/03/04 02:23:06 1.4
+++ utils.c 2000/03/20 21:18:42
@@ -2722,7 +2722,8 @@ floatformat_from_doublest (fmt, from, to
unsigned char *uto = (unsigned char *) to;
memcpy (&dfrom, from, sizeof (dfrom));
- memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
+ memset (uto, 0, (fmt->totalsize + FLOATFORMAT_CHAR_BIT - 1)
+ / FLOATFORMAT_CHAR_BIT);
if (dfrom == 0)
return; /* Result is zero */
if (dfrom != dfrom) /* Result is NaN */
@@ -2771,7 +2772,7 @@ floatformat_from_doublest (fmt, from, to
mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
mant *= 4294967296.0;
- mant_long = (unsigned long) mant;
+ mant_long = ((unsigned long) mant) & 0xffffffffL;
mant -= mant_long;
/* If the integer bit is implicit, then we need to discard it.
@@ -2782,6 +2783,7 @@ floatformat_from_doublest (fmt, from, to
&& fmt->intbit == floatformat_intbit_no)
{
mant_long <<= 1;
+ mant_long &= 0xffffffffL;
mant_bits -= 1;
}