This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [libiberty and gdb] floatformat_is_valid


On Mon, Sep 15, 2003 at 10:39:33AM -0400, Daniel Jacobowitz wrote:

GDB's "struct value" has a union in it.  This union, named "aligner", has a
long double member as well as several others; its goal is to be a cheap way
to ensure that we can load all sorts of values straight from the value
structure, without alignment problems.  Unfortunately, this means that when
debugging GDB we tend to feed random bytes to printf ("%.35Lg").  That's not
kosher, and on i386 I've found a whole bunch of numbers which can crash it -
the gist is that GMP shifts normalized numbers over until it hits a one bit,
and if the explicit integer bit isn't set it walks right out of the number.

This could show up in other places too.  Anywhere you print floating-point
data from the inferior, really.

So here's a patch which checks for the problem.  I added
floatformat_is_valid to libiberty/floatformat.c.  Is this OK?
[Do I need approval?  Floatformat.c is in libiberty, but marked as part of
GDB.]

Oh, this patch misses some copyright year updates.  I'll get them before
checking in.


This patch fixes a really annoyin problem when debugging GDB.  It
doesn't generally come up debugging anything else, though.

For the record, I don't care :-) It appears to work (I guess my revision should go in?), and fixes a bug.


I'm planning to leave the patch for 6.0.1.  Does anyone believe it
should be in 6.0 instead?

enjoy, Andrew



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]