aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog42
-rw-r--r--Makeconfig13
-rw-r--r--math/math.h27
-rw-r--r--math/math_private.h8
-rwxr-xr-xscripts/config.sub9
-rw-r--r--string/endian.h6
-rw-r--r--sysdeps/arm/bits/endian.h3
-rw-r--r--sysdeps/arm/dl-machine.h8
-rw-r--r--sysdeps/libm-ieee754/e_atan2.c2
-rw-r--r--sysdeps/libm-ieee754/e_log.c5
-rw-r--r--sysdeps/libm-ieee754/s_trunc.c4
-rw-r--r--sysdeps/libm-ieee754/s_truncf.c4
-rw-r--r--sysdeps/mips/mul_1.S4
13 files changed, 112 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index fdebe7baf1..13ec054646 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,45 @@
+1998-09-03 Philip Blundell <pb@nexus.co.uk>
+
+ * sysdeps/arm/bits/endian.h (__FLOAT_WORD_ORDER): Define to big
+ endian.
+ * math/math_private.h: Use __FLOAT_WORD_ORDER rather than
+ BYTE_ORDER.
+ * string/endian.h: If __FLOAT_WORD_ORDER wasn't defined by
+ <bits/endian.h>, make it the same as __BYTE_ORDER.
+
+1998-11-27 Ulrich Drepper <drepper@cygnus.com>
+
+ * math/math.h: Avoid using long double functions in generic macros
+ if __NO_LONG_DOUBLE_MATH.
+
+ * sysdeps/arm/dl-machine.h: Fix handling of weak undefined symbols
+ during bootstrapping.
+ * scripts/config.sub: Add Netwinder specific matches.
+ Patch by Scott Bambrough <scottb@corelcomputer.com>.
+
+1998-11-26 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
+
+ * Makeconfig ($(common-objpfx)sysd-dirs): Use automatic variables
+ if possible.
+ ($(common-objpfx)sysd-sorted): Likewise.
+
+1998-11-27 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * sysdeps/libm-ieee754/e_log.c (__ieee754_log): Add declaration of
+ local variables t1,t2 only if needed.
+
+ * sysdeps/libm-ieee754/e_atan2.c: Added braces to avoid compiler
+ warnings.
+ * sysdeps/libm-ieee754/s_truncf.c (__truncf): Likewise.
+ * sysdeps/libm-ieee754/s_trunc.c (__trunc): Likewise.
+
+ * sysdeps/mips/mul_1.S (Loop): Add closing comment to avoid
+ warning.
+
+1998-11-27 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * math/math.h: Add brace to correct #if expression.
+
1998-11-26 Philip Blundell <philb@gnu.org>
Undo change of 1998-11-12:
diff --git a/Makeconfig b/Makeconfig
index ac3834af50..962f702d55 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -779,23 +779,22 @@ $(common-objpfx)sysd-dirs: $(common-objpfx)config.make $(all-Subdirs-files)
END { printf "sysdep-subdirs =%s\n", subdirs; \
printf "sysdep-inhibit-subdirs =%s\n", inhibit; \
print "sysd-dirs-done = t" }' \
- /dev/null $(all-Subdirs-files) > $@-tmp
+ $(patsubst $<,/dev/null,$^) > $@-tmp
mv -f $@-tmp $@
all-Depend-files = $(wildcard $(..)*/Depend)
$(common-objpfx)sysd-sorted: $(..)scripts/gen-sorted.awk $(all-Depend-files) \
$(common-objpfx)sysd-dirs $(..)Makeconfig
- (files="$(all-Depend-files)"; \
- for f in $$files; do \
- dir=`echo $$f | sed 's@^$(..)\(.*\)/[^/]*$$@\1@'`; \
+ (dirs='$(patsubst $(..)%/Depend,%,$(filter %/Depend, $^))'; \
+ for d in $$dirs; do \
while read on; do \
- echo "depend $$dir $$on"; \
- done < $$f; \
+ echo "depend $$d $$on"; \
+ done < $$d/Depend; \
done; \
for f in $(all-subdirs); do \
echo $$f; \
done \
- ) | $(AWK) -f $(..)scripts/gen-sorted.awk > $@-tmp
+ ) | $(AWK) -f $< > $@-tmp
mv -f $@-tmp $@
endif # Makeconfig not yet included
diff --git a/math/math.h b/math/math.h
index 42f32eef14..d95755f09a 100644
--- a/math/math.h
+++ b/math/math.h
@@ -83,7 +83,7 @@ __BEGIN_DECLS
# undef _Mdouble_
# undef __MATH_PRECNAME
-# if __STDC__ - 0 || __GNUC__ - 0 && !defined __NO_LONG_DOUBLE_MATH
+# if (__STDC__ - 0 || __GNUC__ - 0) && !defined __NO_LONG_DOUBLE_MATH
/* Include the file of declarations again, this time using `long double'
instead of `double' and appending l to each function name. */
@@ -166,43 +166,68 @@ enum
};
/* Return number of classification appropriate for X. */
+#ifdef __NO_LONG_DOUBLE_MATH
+# define fpclassify(x) \
+ (sizeof (x) == sizeof (float) ? __fpclassifyf (x) : __fpclassify (x))
+#else
# define fpclassify(x) \
(sizeof (x) == sizeof (float) ? \
__fpclassifyf (x) \
: sizeof (x) == sizeof (double) ? \
__fpclassify (x) : __fpclassifyl (x))
+#endif
/* Return nonzero value if sign of X is negative. */
+#ifdef __NO_LONG_DOUBLE_MATH
+# define signbit(x) \
+ (sizeof (x) == sizeof (float) ? __signbitf (x) : __signbit (x))
+#else
# define signbit(x) \
(sizeof (x) == sizeof (float) ? \
__signbitf (x) \
: sizeof (x) == sizeof (double) ? \
__signbit (x) : __signbitl (x))
+#endif
/* Return nonzero value if X is not +-Inf or NaN. */
+#ifdef __NO_LONG_DOUBLE_MATH
+# define isfinite(x) \
+ (sizeof (x) == sizeof (float) ? __finitef (x) : __finite (x))
+#else
# define isfinite(x) \
(sizeof (x) == sizeof (float) ? \
__finitef (x) \
: sizeof (x) == sizeof (double) ? \
__finite (x) : __finitel (x))
+#endif
/* Return nonzero value if X is neither zero, subnormal, Inf, nor NaN. */
# define isnormal(x) (fpclassify (x) == FP_NORMAL)
/* Return nonzero value if X is a NaN. We could use `fpclassify' but
we already have this functions `__isnan' and it is faster. */
+#ifdef __NO_LONG_DOUBLE_MATH
+# define isnan(x) \
+ (sizeof (x) == sizeof (float) ? __isnanf (x) : __isnan (x))
+#else
# define isnan(x) \
(sizeof (x) == sizeof (float) ? \
__isnanf (x) \
: sizeof (x) == sizeof (double) ? \
__isnan (x) : __isnanl (x))
+#endif
/* Return nonzero value is X is positive or negative infinity. */
+#ifdef __NO_LONG_DOUBLE_MATH
+# define isinf(x) \
+ (sizeof (x) == sizeof (float) ? __isinff (x) : __isinf (x))
+#else
# define isinf(x) \
(sizeof (x) == sizeof (float) ? \
__isinff (x) \
: sizeof (x) == sizeof (double) ? \
__isinf (x) : __isinfl (x))
+#endif
#endif /* Use ISO C 9X. */
diff --git a/math/math_private.h b/math/math_private.h
index 6d51930230..906b1dabba 100644
--- a/math/math_private.h
+++ b/math/math_private.h
@@ -34,7 +34,7 @@
/* A union which permits us to convert between a double and two 32 bit
ints. */
-#if BYTE_ORDER == BIG_ENDIAN
+#if __FLOAT_WORD_ORDER == BIG_ENDIAN
typedef union
{
@@ -48,7 +48,7 @@ typedef union
#endif
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN
typedef union
{
@@ -150,7 +150,7 @@ do { \
/* A union which permits us to convert between a long double and
three 32 bit ints. */
-#if BYTE_ORDER == BIG_ENDIAN
+#if __FLOAT_WORD_ORDER == BIG_ENDIAN
typedef union
{
@@ -166,7 +166,7 @@ typedef union
#endif
-#if BYTE_ORDER == LITTLE_ENDIAN
+#if __FLOAT_WORD_ORDER == LITTLE_ENDIAN
typedef union
{
diff --git a/scripts/config.sub b/scripts/config.sub
index 213a6d47d6..aac909889c 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -182,7 +182,7 @@ case $basic_machine in
| sparc64-* | mips64-* | mipsel-* \
| mips64el-* | mips64orion-* | mips64orionel-* \
| mipstx39-* | mipstx39el-* \
- | f301-*)
+ | f301-* | armv*-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -412,6 +412,10 @@ case $basic_machine in
basic_machine=i486-ncr
os=-sysv4
;;
+ netwinder)
+ basic_machine=armv4l-ccc
+ os=-linux
+ ;;
news | news700 | news800 | news900)
basic_machine=m68k-sony
os=-newsos
@@ -802,6 +806,9 @@ case $basic_machine in
*-acorn)
os=-riscix1.2
;;
+ arm*-ccc)
+ os=-linux
+ ;;
arm*-semi)
os=-aout
;;
diff --git a/string/endian.h b/string/endian.h
index 03e802f6cb..109678aeaa 100644
--- a/string/endian.h
+++ b/string/endian.h
@@ -34,6 +34,12 @@
/* This file defines `__BYTE_ORDER' for the particular machine. */
#include <bits/endian.h>
+/* Some machines may need to use a different endianness for floating point
+ values. */
+#ifndef __FLOAT_WORD_ORDER
+# define __FLOAT_WORD_ORDER __BYTE_ORDER
+#endif
+
#ifdef __USE_BSD
# define LITTLE_ENDIAN __LITTLE_ENDIAN
# define BIG_ENDIAN __BIG_ENDIAN
diff --git a/sysdeps/arm/bits/endian.h b/sysdeps/arm/bits/endian.h
index ad3b5393bc..7fe486e89d 100644
--- a/sysdeps/arm/bits/endian.h
+++ b/sysdeps/arm/bits/endian.h
@@ -1,7 +1,8 @@
-/* ARM is little-endian. */
+/* ARM is (usually) little-endian but with a big-endian FPU. */
#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif
#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __BIG_ENDIAN
diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h
index 66ab4c6de2..53aa806ec2 100644
--- a/sysdeps/arm/dl-machine.h
+++ b/sysdeps/arm/dl-machine.h
@@ -416,7 +416,13 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
break;
case R_ARM_GLOB_DAT:
case R_ARM_JUMP_SLOT:
- *reloc_addr = value;
+#ifdef RTLD_BOOTSTRAP
+ /* Fix weak undefined references. */
+ if (sym != NULL && sym->st_value == 0)
+ *reloc_addr = 0;
+ else
+#endif
+ *reloc_addr = value;
break;
case R_ARM_ABS32:
{
diff --git a/sysdeps/libm-ieee754/e_atan2.c b/sysdeps/libm-ieee754/e_atan2.c
index 4bf5f57086..ae7d759a9f 100644
--- a/sysdeps/libm-ieee754/e_atan2.c
+++ b/sysdeps/libm-ieee754/e_atan2.c
@@ -74,7 +74,7 @@ pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
if(((ix|((lx|-lx)>>31))>0x7ff00000)||
((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */
return x+y;
- if((hx-0x3ff00000|lx)==0) return __atan(y); /* x=1.0 */
+ if(((hx-0x3ff00000)|lx)==0) return __atan(y); /* x=1.0 */
m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */
/* when y = 0 */
diff --git a/sysdeps/libm-ieee754/e_log.c b/sysdeps/libm-ieee754/e_log.c
index 5b8c7b3ade..38ea069c46 100644
--- a/sysdeps/libm-ieee754/e_log.c
+++ b/sysdeps/libm-ieee754/e_log.c
@@ -103,7 +103,10 @@ static double zero = 0.0;
double x;
#endif
{
- double hfsq,f,s,z,R,w,t1,t2,dk,t11,t12,t21,t22,w2,zw2;
+ double hfsq,f,s,z,R,w,dk,t11,t12,t21,t22,w2,zw2;
+#ifdef DO_NOT_USE_THIS
+ double t1,t2;
+#endif
int32_t k,hx,i,j;
u_int32_t lx;
diff --git a/sysdeps/libm-ieee754/s_trunc.c b/sysdeps/libm-ieee754/s_trunc.c
index 721dce5a55..07b4951bcb 100644
--- a/sysdeps/libm-ieee754/s_trunc.c
+++ b/sysdeps/libm-ieee754/s_trunc.c
@@ -1,5 +1,5 @@
/* Truncate argument to nearest integral value not larger than the argument.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -39,7 +39,7 @@ __trunc (double x)
/* The magnitude of the number is < 1 so the result is +-0. */
INSERT_WORDS (x, sx, 0);
else
- INSERT_WORDS (x, sx | i0 & ~(0x000fffff >> j0), 0);
+ INSERT_WORDS (x, sx | (i0 & ~(0x000fffff >> j0)), 0);
}
else if (j0 > 51)
{
diff --git a/sysdeps/libm-ieee754/s_truncf.c b/sysdeps/libm-ieee754/s_truncf.c
index 3e7b133c37..feb6b6f23a 100644
--- a/sysdeps/libm-ieee754/s_truncf.c
+++ b/sysdeps/libm-ieee754/s_truncf.c
@@ -1,5 +1,5 @@
/* Truncate argument to nearest integral value not larger than the argument.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -38,7 +38,7 @@ __truncf (float x)
/* The magnitude of the number is < 1 so the result is +-0. */
SET_FLOAT_WORD (x, sx);
else
- SET_FLOAT_WORD (x, sx | i0 & ~(0x007fffff >> j0));
+ SET_FLOAT_WORD (x, sx | (i0 & ~(0x007fffff >> j0)));
}
else
{
diff --git a/sysdeps/mips/mul_1.S b/sysdeps/mips/mul_1.S
index 184aae6fa1..aeaf083d89 100644
--- a/sysdeps/mips/mul_1.S
+++ b/sysdeps/mips/mul_1.S
@@ -1,7 +1,7 @@
/* MIPS __mpn_mul_1 -- Multiply a limb vector with a single limb and
store the product in a second limb vector.
-Copyright (C) 1995 Free Software Foundation, Inc.
+Copyright (C) 1995, 1998 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -74,7 +74,7 @@ $LC1: mflo $10
multu $8,$7
sw $10,0($4)
addiu $4,$4,4
- addu $2,$9,$2 /* add high product limb and carry from addition
+ addu $2,$9,$2 /* add high product limb and carry from addition */
/* cool down phase 0 */
$LC0: mflo $10