OSDN Git Service

Declare __infinity as an array to work around problems with small data support
authormeissner <meissner>
Fri, 28 Jul 2000 16:27:52 +0000 (16:27 +0000)
committermeissner <meissner>
Fri, 28 Jul 2000 16:27:52 +0000 (16:27 +0000)
newlib/ChangeLog
newlib/libc/include/math.h
newlib/libm/math/s_infconst.c
newlib/libm/mathfp/s_infconst.c

index e81a73e..ec72e9c 100644 (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
index cd03945..6a6440d 100644 (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) */
 
index 85b3b68..e6b86d4 100644 (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) */
index 85b3b68..e6b86d4 100644 (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) */