summaryrefslogtreecommitdiffstats
path: root/contrib/gdtoa
diff options
context:
space:
mode:
authordas <das@FreeBSD.org>2003-03-12 20:20:22 +0000
committerdas <das@FreeBSD.org>2003-03-12 20:20:22 +0000
commitb2697c9471c911a71c2cbeb1bfed485ea97acb9a (patch)
tree11432100ec641dc409ec25be4125cdf972a9bc59 /contrib/gdtoa
parentf7860715de90ddfb26c849bfe972c0988fce4b2d (diff)
downloadFreeBSD-src-b2697c9471c911a71c2cbeb1bfed485ea97acb9a.zip
FreeBSD-src-b2697c9471c911a71c2cbeb1bfed485ea97acb9a.tar.gz
Local patches:
- include extra system headers and add appropriate #defines - use a spinlock to synchronize parts of gdtoa - protect exported symbols with leading underscores Reviewed by: bde (briefly), mike (mentor), obrien
Diffstat (limited to 'contrib/gdtoa')
-rw-r--r--contrib/gdtoa/gdtoaimp.h148
1 files changed, 99 insertions, 49 deletions
diff --git a/contrib/gdtoa/gdtoaimp.h b/contrib/gdtoa/gdtoaimp.h
index 8ba37ae..76a1ea2 100644
--- a/contrib/gdtoa/gdtoaimp.h
+++ b/contrib/gdtoa/gdtoaimp.h
@@ -26,6 +26,8 @@ THIS SOFTWARE.
****************************************************************/
+/* $FreeBSD$ */
+
/* This is a variation on dtoa.c that converts arbitary binary
floating-point formats to and from decimal notation. It uses
double-precision arithmetic internally, so there are still
@@ -182,8 +184,11 @@ THIS SOFTWARE.
#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
#endif
+#include "limits.h"
#include "stdlib.h"
#include "string.h"
+#include "libc_private.h"
+#include "spinlock.h"
#ifdef KR_headers
#define Char char
@@ -197,6 +202,8 @@ extern Char *MALLOC ANSI((size_t));
#define MALLOC malloc
#endif
+#define INFNAN_CHECK
+
#undef IEEE_Arith
#undef Avoid_Underflow
#ifdef IEEE_MC68k
@@ -456,10 +463,16 @@ extern double rnd_prod(double, double), rnd_quot(double, double);
#define ALL_ON 0xffff
#endif
-#ifndef MULTIPLE_THREADS
-#define ACQUIRE_DTOA_LOCK(n) /*nothing*/
-#define FREE_DTOA_LOCK(n) /*nothing*/
-#endif
+#define MULTIPLE_THREADS
+extern spinlock_t __gdtoa_locks[2];
+#define ACQUIRE_DTOA_LOCK(n) do { \
+ if (__isthreaded) \
+ _SPINLOCK(&__gdtoa_locks[n]); \
+} while(0)
+#define FREE_DTOA_LOCK(n) do { \
+ if (__isthreaded) \
+ _SPINUNLOCK(&__gdtoa_locks[n]); \
+} while(0)
#define Kmax 15
@@ -482,51 +495,88 @@ extern void memcpy_D2A ANSI((void*, const void*, size_t));
#define Bcopy(x,y) memcpy(&x->sign,&y->sign,y->wds*sizeof(ULong) + 2*sizeof(int))
#endif /* NO_STRING_H */
-#define Balloc Balloc_D2A
-#define Bfree Bfree_D2A
-#define ULtoQ ULtoQ_D2A
-#define ULtof ULtof_D2A
-#define ULtod ULtod_D2A
-#define ULtodd ULtodd_D2A
-#define ULtox ULtox_D2A
-#define ULtoxL ULtoxL_D2A
-#define any_on any_on_D2A
-#define b2d b2d_D2A
-#define bigtens bigtens_D2A
-#define cmp cmp_D2A
-#define copybits copybits_D2A
-#define d2b d2b_D2A
-#define decrement decrement_D2A
-#define diff diff_D2A
-#define dtoa_result dtoa_result_D2A
-#define g__fmt g__fmt_D2A
-#define gethex gethex_D2A
-#define hexdig hexdig_D2A
-#define hexnan hexnan_D2A
-#define hi0bits hi0bits_D2A
-#define i2b i2b_D2A
-#define increment increment_D2A
-#define lo0bits lo0bits_D2A
-#define lshift lshift_D2A
-#define match match_D2A
-#define mult mult_D2A
-#define multadd multadd_D2A
-#define nrv_alloc nrv_alloc_D2A
-#define pow5mult pow5mult_D2A
-#define quorem quorem_D2A
-#define ratio ratio_D2A
-#define rshift rshift_D2A
-#define rv_alloc rv_alloc_D2A
-#define s2b s2b_D2A
-#define set_ones set_ones_D2A
-#define strcp strcp_D2A
-#define strtoIg strtoIg_D2A
-#define sum sum_D2A
-#define tens tens_D2A
-#define tinytens tinytens_D2A
-#define tinytens tinytens_D2A
-#define trailz trailz_D2A
-#define ulp ulp_D2A
+/*
+ * Paranoia: Protect exported symbols, including ones in files we don't
+ * compile right now. The standard strtof and strtod survive.
+ */
+#define dtoa __dtoa
+#define gdtoa __gdtoa
+#define freedtoa __freedtoa
+#define strtodg __strtodg
+#define g_ddfmt __g_ddfmt
+#define g_dfmt __g_dfmt
+#define g_ffmt __g_ffmt
+#define g_Qfmt __g_Qfmt
+#define g_xfmt __g_xfmt
+#define g_xLfmt __g_xLfmt
+#define strtoId __strtoId
+#define strtoIdd __strtoIdd
+#define strtoIf __strtoIf
+#define strtoIQ __strtoIQ
+#define strtoIx __strtoIx
+#define strtoIxL __strtoIxL
+#define strtord __strtord
+#define strtordd __strtordd
+#define strtorf __strtorf
+#define strtorQ __strtorQ
+#define strtorx __strtorx
+#define strtorxL __strtorxL
+#define strtodI __strtodI
+#define strtopd __strtopd
+#define strtopdd __strtopdd
+#define strtopf __strtopf
+#define strtopQ __strtopQ
+#define strtopx __strtopx
+#define strtopxL __strtopxL
+
+/* Protect gdtoa-internal symbols */
+#define Balloc __Balloc_D2A
+#define Bfree __Bfree_D2A
+#define ULtoQ __ULtoQ_D2A
+#define ULtof __ULtof_D2A
+#define ULtod __ULtod_D2A
+#define ULtodd __ULtodd_D2A
+#define ULtox __ULtox_D2A
+#define ULtoxL __ULtoxL_D2A
+#define any_on __any_on_D2A
+#define b2d __b2d_D2A
+#define bigtens __bigtens_D2A
+#define cmp __cmp_D2A
+#define copybits __copybits_D2A
+#define d2b __d2b_D2A
+#define decrement __decrement_D2A
+#define diff __diff_D2A
+#define dtoa_result __dtoa_result_D2A
+#define g__fmt __g__fmt_D2A
+#define gethex __gethex_D2A
+#define hexdig __hexdig_D2A
+#define hexdig_init_D2A __hexdig_init_D2A
+#define hexnan __hexnan_D2A
+#define hi0bits __hi0bits_D2A
+#define i2b __i2b_D2A
+#define increment __increment_D2A
+#define lo0bits __lo0bits_D2A
+#define lshift __lshift_D2A
+#define match __match_D2A
+#define mult __mult_D2A
+#define multadd __multadd_D2A
+#define nrv_alloc __nrv_alloc_D2A
+#define pow5mult __pow5mult_D2A
+#define quorem __quorem_D2A
+#define ratio __ratio_D2A
+#define rshift __rshift_D2A
+#define rv_alloc __rv_alloc_D2A
+#define s2b __s2b_D2A
+#define set_ones __set_ones_D2A
+#define strcp __strcp_D2A
+#define strcp_D2A __strcp_D2A
+#define strtoIg __strtoIg_D2A
+#define sum __sum_D2A
+#define tens __tens_D2A
+#define tinytens __tinytens_D2A
+#define tinytens __tinytens_D2A
+#define trailz __trailz_D2A
+#define ulp __ulp_D2A
extern char *dtoa_result;
extern CONST double bigtens[], tens[], tinytens[];
OpenPOWER on IntegriCloud