]> git.proxmox.com Git - mirror_edk2.git/commit
StdLib: The formatting for double float values, within the gdtoa library, is improper.
authorDaryl McDaniel <daryl.mcdaniel@intel.com>
Wed, 6 Aug 2014 18:29:02 +0000 (18:29 +0000)
committerdarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 6 Aug 2014 18:29:02 +0000 (18:29 +0000)
commitb04aba1773d313e50383b11acc599242c2723986
tree2900d12feb8c11cc30d1c02f1552443f4460cbae
parent09fd5328a48faf4f4dfda78015842317cd41c98c
StdLib: The formatting for double float values, within the gdtoa library, is improper.

When running Enquire.efi, several errors similar to the following are produced:
Maximum exponent = 128
Maximum number = 3.40282347e+38

*** WARNING: Possibly bad output from printf above
    expected value around 3.40282347e38, bit pattern:
    11111111 11111111 01111111 01111111
    sscanf gave           -inf, bit pattern:
    00000000 00000000 10000000 11111111
    difference= inf

Overflow doesn’t seem to generate a trap

The memory allocation tests will also fail, sometimes leaving all available memory consumed.

The correct output in the above example is:
Maximum exponent = 128
Maximum number = 3.40282347e+38
Overflow doesn't seem to generate a trap

The root cause is that all operations on values of Long or ULong type, within the gdtoa library, must be 32-bit operations.  A previous change replaced the Long and ULong definitions with INTN and UINTN, respectively.  While this is correct for a lot of Linux and NetBSD code, it was not correct for this library.

This fix reverts the definitions of ULong and Long back to 32-bit types.
A descriptive comment has also been added to the U union.
Additional white-space has been added to tidy up the definitions of the word0 and word1 macros.

Verified with Enquire.efi and the ISO/IEC C Library compliance Validation Suite.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Daryl McDaniel <daryl.mcdaniel@intel.com>
Reviewed-by: Jaben Carsey <Jaben.carsey@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15765 6f19259b-4bc3-4df7-8a09-765794883524
StdLib/LibC/gdtoa/gdtoa.h
StdLib/LibC/gdtoa/gdtoaimp.h