Declare __infinity as an array to work around problems with small data support

This commit is contained in:
Michael Meissner 2000-07-28 16:27:55 +00:00
parent b7d9755e16
commit 7c110b172c
4 changed files with 27 additions and 9 deletions

View File

@ -1,3 +1,11 @@
2000-07-28 Michael Meissner <meissner@redhat.com>
* libc/include/math.h (__infinity): Declare as an array without
bounds to get around small data support. Rewrite Cygwin support
to be more general.
* libm/math/s_infconst.c (__infinity): Ditto.
* libm/mathfp/s_infconst.c (__infinity): Ditto.
Thu Jul 27 10:46:01 2000 Christopher Faylor <cgf@cygnus.com>
* libc/include/math.h: Use appropriate dll import linkage for

View File

@ -21,13 +21,23 @@ union __dmath
double d;
};
/* Declare this as an array without bounds so that no matter what small data
support a port and/or library has, this reference will be via the general
method for accessing globals.
Also under Cygwin, the library exports a pointer to the real value, so we
need to properly dereference it. */
#ifndef __INFINITY_DECL__
#if !defined(__CYGWIN__) || defined(__INSIDE_CYGWIN__) || defined(_COMPILING_NEWLIB)
extern const union __dmath __infinity;
#define __INFINITY_DECL__
#else
extern __declspec(dllimport) const union __dmath __infinity;
#define __INFINITY_DECL__ __declspec(dllimport)
#endif
#endif
#define HUGE_VAL (__infinity.d)
extern __INFINITY_DECL__ const union __dmath __infinity[];
#define HUGE_VAL (__infinity[0].d)
#endif /* ! defined (HUGE_VAL) */

View File

@ -6,10 +6,10 @@
#ifndef _DOUBLE_IS_32BITS
#ifdef __IEEE_BIG_ENDIAN
const union __dmath __infinity = { 0x7ff00000, 0 };
const union __dmath __infinity[1] = {{ 0x7ff00000, 0 }};
#else
const union __dmath __infinity = { 0, 0x7ff00000 };
const union __dmath __infinity[1] = {{ 0, 0x7ff00000 }};
#endif
#else /* defined (_DOUBLE_IS_32BITS) */
const union __dmath __infinity = { 0x7f800000, 0 };
const union __dmath __infinity[1] = {{ 0x7f800000, 0 }};
#endif /* defined (_DOUBLE_IS_32BITS) */

View File

@ -6,10 +6,10 @@
#ifndef _DOUBLE_IS_32BITS
#ifdef __IEEE_BIG_ENDIAN
const union __dmath __infinity = { 0x7ff00000, 0 };
const union __dmath __infinity[1] = {{ 0x7ff00000, 0 }};
#else
const union __dmath __infinity = { 0, 0x7ff00000 };
const union __dmath __infinity[1] = {{ 0, 0x7ff00000 }};
#endif
#else /* defined (_DOUBLE_IS_32BITS) */
const union __dmath __infinity = { 0x7f800000, 0 };
const union __dmath __infinity[1] = {{ 0x7f800000, 0 }};
#endif /* defined (_DOUBLE_IS_32BITS) */