aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2000-08-19 16:58:09 +0000
committerUlrich Drepper <drepper@redhat.com>2000-08-19 16:58:09 +0000
commit60f0e64b3c13cf717fd49d327dbbca88568ca647 (patch)
tree06093754479c7bbe18bed7bb50a905358290f42f /sysdeps
parent277723d891149ded87f4d7fbb080575c722bdf75 (diff)
downloadglibc-60f0e64b3c13cf717fd49d327dbbca88568ca647.tar
glibc-60f0e64b3c13cf717fd49d327dbbca88568ca647.tar.gz
glibc-60f0e64b3c13cf717fd49d327dbbca88568ca647.tar.bz2
glibc-60f0e64b3c13cf717fd49d327dbbca88568ca647.zip
Update.
* malloc/mtrace.pl (usage): Inform about --help. 2000-08-19 Wolfram Gloger <wg@malloc.de> * malloc/malloc.c (new_heap): try harder to get an aligned chunk of size HEAP_MAX_SIZE. 2000-08-19 Andreas Jaeger <aj@suse.de> * shlib-versions: Remove libnss_db, libdb and libdb1. 2000-08-19 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/alpha/readdir.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir_r.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir_r.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir64.c: Remove. * sysdeps/unix/sysv/linux/alpha/readdir64_r.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents64.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents.c: Only use for non-LFS getdents. * sysdeps/unix/sysv/linux/readdir64.c: Remove versioning. * sysdeps/unix/sysv/linux/readdir64_r.c: Likewise. 2000-08-18 Jakub Jelinek <jakub@redhat.com> * include/glob.h (__glob64): Add prototype. * sysdeps/generic/glob.c: If GLOB_ONLY_P is defined, only define glob and glob_in_dir. * sysdeps/unix/sysv/linux/i386/Versions: Add glob64@@GLIBC_2.2. * sysdeps/unix/sysv/linux/arm/Versions: Likewise. * sysdeps/unix/sysv/linux/powerpc/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise. * sysdeps/unix/sysv/linux/i386/glob64.c: New file. * sysdeps/unix/sysv/linux/arm/glob64.c: New file. * sysdeps/unix/sysv/linux/powerpc/glob64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: New file. 2000-08-18 Jakub Jelinek <jakub@redhat.com> * malloc/Makefile (memusage): libmemusage.so is installed in slibdir. 2000-08-17 Andreas Jaeger <aj@suse.de> * math/test-fenv.c (fe_single_test): New function. (fe_env_tests): Use fe_single_test. (feenable_test): New tests for feenable/fedisable and fegetexcpetions. (feexcp_mask_test): New function. (feexcp_nomask_test): New function. 2000-08-19 Richard Henderson <rth@cygnus.com> * sysdeps/alpha/fpu/fenv_libc.h: New file. * sysdeps/alpha/fpu/fclrexcpt.c: Use it. * sysdeps/alpha/fpu/fegetenv.c: Likewise. * sysdeps/alpha/fpu/fesetround.c: Likewise. * sysdeps/alpha/fpu/fegetround.c: Likewise. * sysdeps/alpha/fpu/fgetexcptflg.c: Likewise. * sysdeps/alpha/fpu/fraiseexcpt.c: Likewise. * sysdeps/alpha/fpu/ftestexcept.c: Likewise. * sysdeps/alpha/fpu/fedisblxcpt.c: Likewise. Use the smaller mask. * sysdeps/alpha/fpu/feenablxcpt.c: Likewise. * sysdeps/alpha/fpu/fegetexcept.c: Likewise. * sysdeps/alpha/fpu/feholdexcpt.c: Retain the SWCR_MAP bits. * sysdeps/alpha/fpu/fesetenv.c: Likewise. * sysdeps/alpha/fpu/feupdateenv.c: Likewise. * sysdeps/alpha/fpu/fsetexcptflg.c: Likewise. * sysdeps/alpha/fpu/bits/fenv.h (FE_DENORMAL): New. (FE_MAP_DMZ, FE_MAP_UMZ, FE_NONIEEE_ENV): New. 2000-08-19 Andreas Jaeger <aj@suse.de>
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/alpha/fpu/bits/fenv.h26
-rw-r--r--sysdeps/alpha/fpu/fclrexcpt.c4
-rw-r--r--sysdeps/alpha/fpu/fedisblxcpt.c6
-rw-r--r--sysdeps/alpha/fpu/feenablxcpt.c6
-rw-r--r--sysdeps/alpha/fpu/fegetenv.c8
-rw-r--r--sysdeps/alpha/fpu/fegetexcept.c4
-rw-r--r--sysdeps/alpha/fpu/fegetround.c6
-rw-r--r--sysdeps/alpha/fpu/feholdexcpt.c6
-rw-r--r--sysdeps/alpha/fpu/fesetenv.c6
-rw-r--r--sysdeps/alpha/fpu/fesetround.c7
-rw-r--r--sysdeps/alpha/fpu/feupdateenv.c4
-rw-r--r--sysdeps/alpha/fpu/fgetexcptflg.c4
-rw-r--r--sysdeps/alpha/fpu/fraiseexcpt.c5
-rw-r--r--sysdeps/alpha/fpu/fsetexcptflg.c4
-rw-r--r--sysdeps/alpha/fpu/ftestexcept.c6
-rw-r--r--sysdeps/generic/glob.c19
-rw-r--r--sysdeps/unix/sysv/linux/alpha/getdents.c6
-rw-r--r--sysdeps/unix/sysv/linux/alpha/getdents64.c1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/readdir.c7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/readdir64.c1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/readdir64_r.c1
-rw-r--r--sysdeps/unix/sysv/linux/alpha/readdir_r.c4
-rw-r--r--sysdeps/unix/sysv/linux/arm/Versions3
-rw-r--r--sysdeps/unix/sysv/linux/arm/glob64.c1
-rw-r--r--sysdeps/unix/sysv/linux/i386/Versions3
-rw-r--r--sysdeps/unix/sysv/linux/i386/glob64.c48
-rw-r--r--sysdeps/unix/sysv/linux/ia64/readdir.c8
-rw-r--r--sysdeps/unix/sysv/linux/ia64/readdir_r.c5
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/Versions3
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/glob64.c1
-rw-r--r--sysdeps/unix/sysv/linux/readdir64.c9
-rw-r--r--sysdeps/unix/sysv/linux/readdir64_r.c9
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/Versions3
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c8
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c5
36 files changed, 165 insertions, 83 deletions
diff --git a/sysdeps/alpha/fpu/bits/fenv.h b/sysdeps/alpha/fpu/bits/fenv.h
index 82b85debcd..b6d9b98c86 100644
--- a/sysdeps/alpha/fpu/bits/fenv.h
+++ b/sysdeps/alpha/fpu/bits/fenv.h
@@ -36,6 +36,11 @@
enum
{
+#ifdef __USE_GNU
+ FE_DENORMAL = 1UL << 22,
+#define FE_DENORMAL FE_DENORMAL
+#endif
+
FE_INEXACT = 1UL << 21,
#define FE_INEXACT FE_INEXACT
@@ -51,12 +56,10 @@ enum
FE_INVALID = 1UL << 17,
#define FE_INVALID FE_INVALID
- FE_ALL_EXCEPT =
- (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+ FE_ALL_EXCEPT = 0x3f << 17
#define FE_ALL_EXCEPT FE_ALL_EXCEPT
};
-
/* Alpha chips support all four defined rouding modes.
Note that code must be compiled to use dynamic rounding (/d) instructions
@@ -81,6 +84,19 @@ enum
#define FE_UPWARD FE_UPWARD
};
+#ifdef __USE_GNU
+/* On later hardware, and later kernels for earlier hardware, we can forcibly
+ underflow denormal inputs and outputs. This can speed up certain programs
+ significantly, usually without affecting accuracy. */
+enum
+ {
+ FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */
+#define FE_MAP_DMZ FE_MAP_DMZ
+
+ FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */
+#define FE_MAP_UMZ FE_MAP_UMZ
+ };
+#endif
/* Type representing exception flags. */
typedef unsigned long int fexcept_t;
@@ -96,6 +112,10 @@ typedef unsigned long int fenv_t;
#ifdef __USE_GNU
/* Floating-point environment where none of the exceptions are masked. */
# define FE_NOMASK_ENV ((fenv_t *) 0x880000000000003eUL)
+
+/* Floating-point environment with (processor-dependent) non-IEEE floating
+ point. In this case, mapping denormals to zero. */
+# define FE_NONIEEE_ENV ((fenv_t *) 0x8800000000003000UL)
#endif
/* The system calls to talk to the kernel's FP code. */
diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c
index 006f50613d..71ff748f73 100644
--- a/sysdeps/alpha/fpu/fclrexcpt.c
+++ b/sysdeps/alpha/fpu/fclrexcpt.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__feclearexcept (int excepts)
@@ -29,7 +29,7 @@ __feclearexcept (int excepts)
swcr = __ieee_get_fp_control ();
/* Clear the relevant bits. */
- swcr &= ~((unsigned long int) excepts & FE_ALL_EXCEPT);
+ swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK);
/* Put the new state in effect. */
__ieee_set_fp_control (swcr);
diff --git a/sysdeps/alpha/fpu/fedisblxcpt.c b/sysdeps/alpha/fpu/fedisblxcpt.c
index ab0630c084..7359e144b7 100644
--- a/sysdeps/alpha/fpu/fedisblxcpt.c
+++ b/sysdeps/alpha/fpu/fedisblxcpt.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
fedisableexcept (int excepts)
@@ -27,8 +27,8 @@ fedisableexcept (int excepts)
new_exc = __ieee_get_fp_control ();
- old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
- new_exc &= ~((excepts & FE_ALL_EXCEPT) >> 16);
+ old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
+ new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK);
__ieee_set_fp_control (new_exc);
diff --git a/sysdeps/alpha/fpu/feenablxcpt.c b/sysdeps/alpha/fpu/feenablxcpt.c
index d2b0f2e5e5..b36e84680c 100644
--- a/sysdeps/alpha/fpu/feenablxcpt.c
+++ b/sysdeps/alpha/fpu/feenablxcpt.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
feenableexcept (int excepts)
@@ -27,8 +27,8 @@ feenableexcept (int excepts)
new_exc = __ieee_get_fp_control ();
- old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
- new_exc |= (excepts & FE_ALL_EXCEPT) >> 16;
+ old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
+ new_exc |= (excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK;
__ieee_set_fp_control (new_exc);
diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c
index 51ce1c21ab..d6b3f70897 100644
--- a/sysdeps/alpha/fpu/fegetenv.c
+++ b/sysdeps/alpha/fpu/fegetenv.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__fegetenv (fenv_t *envp)
@@ -31,10 +31,8 @@ __fegetenv (fenv_t *envp)
swcr = __ieee_get_fp_control ();
__asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr));
- /* Merge the two bits of information. The magic number at the end is
- the exception enable mask. */
-
- *envp = (fpcr & (3UL << 58)) | (swcr & (FE_ALL_EXCEPT | 0x3e));
+ /* Merge the two bits of information. */
+ *envp = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK));
/* Success. */
return 0;
diff --git a/sysdeps/alpha/fpu/fegetexcept.c b/sysdeps/alpha/fpu/fegetexcept.c
index e4d5e784ea..c0de38f8aa 100644
--- a/sysdeps/alpha/fpu/fegetexcept.c
+++ b/sysdeps/alpha/fpu/fegetexcept.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
fegetexcept (void)
@@ -27,5 +27,5 @@ fegetexcept (void)
exc = __ieee_get_fp_control ();
- return (exc << 16) & FE_ALL_EXCEPT;
+ return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
}
diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c
index 623e2ce358..f64fee7def 100644
--- a/sysdeps/alpha/fpu/fegetround.c
+++ b/sysdeps/alpha/fpu/fegetround.c
@@ -1,5 +1,5 @@
/* Return current rounding direction.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
fegetround (void)
@@ -27,5 +27,5 @@ fegetround (void)
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
- return (fpcr >> 58) & 3;
+ return (fpcr >> FPCR_ROUND_SHIFT) & 3;
}
diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c
index a179366cbf..d683a37bdc 100644
--- a/sysdeps/alpha/fpu/feholdexcpt.c
+++ b/sysdeps/alpha/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
/* Store current floating-point environment and clear exceptions.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
feholdexcept (fenv_t *envp)
@@ -27,7 +27,7 @@ feholdexcept (fenv_t *envp)
fegetenv(envp);
/* Clear all exception status bits and exception enable bits. */
- __ieee_set_fp_control(0);
+ __ieee_set_fp_control(*envp & SWCR_MAP_MASK);
return 0;
}
diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c
index 58bc13aaf2..5bf3b5e59a 100644
--- a/sysdeps/alpha/fpu/fesetenv.c
+++ b/sysdeps/alpha/fpu/fesetenv.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__fesetenv (const fenv_t *envp)
@@ -37,11 +37,11 @@ __fesetenv (const fenv_t *envp)
/* Reset the rounding mode with the hardware fpcr. Note that the following
system call is an implied trap barrier for our modification. */
__asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr));
- fpcr = (fpcr & ~(3UL << 58)) | (env & (3UL << 58));
+ fpcr = (fpcr & ~FPCR_ROUND_MASK) | (env & FPCR_ROUND_MASK);
__asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr));
/* Reset the exception status and mask with the kernel's FP code. */
- __ieee_set_fp_control (env & (FE_ALL_EXCEPT | 0x3e));
+ __ieee_set_fp_control (env & SWCR_ALL_MASK);
/* Success. */
return 0;
diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c
index f0aaaa2c88..42a8b62f49 100644
--- a/sysdeps/alpha/fpu/fesetround.c
+++ b/sysdeps/alpha/fpu/fesetround.c
@@ -1,5 +1,5 @@
/* Set current rounding direction.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
fesetround (int round)
@@ -32,7 +32,8 @@ fesetround (int round)
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
/* Set the relevant bits. */
- fpcr = (fpcr & ~(3UL << 58)) | ((unsigned long)round << 58);
+ fpcr = ((fpcr & ~FPCR_ROUND_MASK)
+ | ((unsigned long)round << FPCR_ROUND_SHIFT));
/* Put the new state in effect. */
__asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));
diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c
index 61226c6b44..b9f1c5b69e 100644
--- a/sysdeps/alpha/fpu/feupdateenv.c
+++ b/sysdeps/alpha/fpu/feupdateenv.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__feupdateenv (const fenv_t *envp)
@@ -34,7 +34,7 @@ __feupdateenv (const fenv_t *envp)
/* Raise the saved exception. Incidently for us the implementation
defined format of the values in objects of type fexcept_t is the
same as the ones specified using the FE_* constants. */
- feraiseexcept ((int) tmp & FE_ALL_EXCEPT);
+ feraiseexcept (tmp & SWCR_STATUS_MASK);
/* Success. */
return 0;
diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c
index bd47535be8..bae1556f5d 100644
--- a/sysdeps/alpha/fpu/fgetexcptflg.c
+++ b/sysdeps/alpha/fpu/fgetexcptflg.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__fegetexceptflag (fexcept_t *flagp, int excepts)
@@ -29,7 +29,7 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
tmp = __ieee_get_fp_control();
/* Return that portion that corresponds to the requested exceptions. */
- *flagp = tmp & excepts & FE_ALL_EXCEPT;
+ *flagp = tmp & excepts & SWCR_STATUS_MASK;
/* Success. */
return 0;
diff --git a/sysdeps/alpha/fpu/fraiseexcpt.c b/sysdeps/alpha/fpu/fraiseexcpt.c
index b0eab000cb..1f72ebaf6a 100644
--- a/sysdeps/alpha/fpu/fraiseexcpt.c
+++ b/sysdeps/alpha/fpu/fraiseexcpt.c
@@ -18,8 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
-#include <math.h>
+#include <fenv_libc.h>
int
__feraiseexcept (int excepts)
@@ -30,7 +29,7 @@ __feraiseexcept (int excepts)
tmp = __ieee_get_fp_control ();
/* Set all the bits that were called for. */
- tmp |= (excepts & FE_ALL_EXCEPT);
+ tmp |= (excepts & SWCR_STATUS_MASK);
/* And store it back. */
__ieee_set_fp_control (tmp);
diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c
index eb74defb5a..57531a4aa0 100644
--- a/sysdeps/alpha/fpu/fsetexcptflg.c
+++ b/sysdeps/alpha/fpu/fsetexcptflg.c
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
__fesetexceptflag (const fexcept_t *flagp, int excepts)
@@ -29,7 +29,7 @@ __fesetexceptflag (const fexcept_t *flagp, int excepts)
tmp = __ieee_get_fp_control ();
/* Set all the bits that were called for. */
- tmp = (tmp & ~FE_ALL_EXCEPT) | (*flagp & excepts & FE_ALL_EXCEPT);
+ tmp = (tmp & ~SWCR_STATUS_MASK) | (*flagp & excepts & SWCR_STATUS_MASK);
/* And store it back. */
__ieee_set_fp_control (tmp);
diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c
index 9ee9dc9c55..9c006de79e 100644
--- a/sysdeps/alpha/fpu/ftestexcept.c
+++ b/sysdeps/alpha/fpu/ftestexcept.c
@@ -1,5 +1,5 @@
/* Test exception in current environment.
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
@@ -18,7 +18,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <fenv.h>
+#include <fenv_libc.h>
int
fetestexcept (int excepts)
@@ -28,5 +28,5 @@ fetestexcept (int excepts)
/* Get current exceptions. */
tmp = __ieee_get_fp_control();
- return tmp & excepts & FE_ALL_EXCEPT;
+ return tmp & excepts & SWCR_STATUS_MASK;
}
diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c
index 2de01337c2..f0d2ace0c5 100644
--- a/sysdeps/generic/glob.c
+++ b/sysdeps/generic/glob.c
@@ -57,6 +57,7 @@
#endif
#ifndef ELIDE_CODE
+#if !defined _LIBC || !defined GLOB_ONLY_P
#if defined STDC_HEADERS || defined __GNU_LIBRARY__
# include <stddef.h>
@@ -299,10 +300,15 @@ static
inline
#endif
const char *next_brace_sub __P ((const char *begin));
+
+#endif /* GLOB_ONLY_P */
+
static int glob_in_dir __P ((const char *pattern, const char *directory,
int flags,
int (*errfunc) (const char *, int),
glob_t *pglob));
+
+#if !defined _LIBC || !defined GLOB_ONLY_P
static int prefix_array __P ((const char *prefix, char **array, size_t n));
static int collated_compare __P ((const __ptr_t, const __ptr_t));
@@ -352,6 +358,8 @@ next_brace_sub (begin)
return cp;
}
+#endif /* !GLOB_ONLY_P */
+
/* Do glob searching for PATTERN, placing results in PGLOB.
The bits defined above may be set in FLAGS.
If a directory cannot be opened or read and ERRFUNC is not nil,
@@ -1075,6 +1083,8 @@ glob (pattern, flags, errfunc, pglob)
}
+#if !defined _LIBC || !defined GLOB_ONLY_P
+
/* Free storage allocated in PGLOB by a previous `glob' call. */
void
globfree (pglob)
@@ -1219,6 +1229,8 @@ weak_alias (__glob_pattern_p, glob_pattern_p)
# endif
#endif
+#endif /* !GLOB_ONLY_P */
+
/* Like `glob', but PATTERN is a final pathname component,
and matches are searched for in DIRECTORY.
@@ -1327,9 +1339,10 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
{
const char *name;
size_t len;
- struct dirent *d = ((flags & GLOB_ALTDIRFUNC)
- ? (*pglob->gl_readdir) (stream)
- : readdir ((DIR *) stream));
+ struct dirent *d =
+ ((flags & GLOB_ALTDIRFUNC)
+ ? (struct dirent *)((*pglob->gl_readdir) (stream))
+ : readdir ((DIR *) stream));
if (d == NULL)
break;
if (! REAL_DIR_ENTRY (d))
diff --git a/sysdeps/unix/sysv/linux/alpha/getdents.c b/sysdeps/unix/sysv/linux/alpha/getdents.c
index f127cd8aad..dfecfef924 100644
--- a/sysdeps/unix/sysv/linux/alpha/getdents.c
+++ b/sysdeps/unix/sysv/linux/alpha/getdents.c
@@ -1,5 +1,3 @@
-#define DIRENT_TYPE struct dirent64
-#define __getdents64 __no___getdents64_decl
+#define DIRENT_SET_DP_INO(dp, value) \
+ do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0)
#include <sysdeps/unix/sysv/linux/getdents.c>
-#undef __getdents64
-weak_alias(__getdents, __getdents64);
diff --git a/sysdeps/unix/sysv/linux/alpha/getdents64.c b/sysdeps/unix/sysv/linux/alpha/getdents64.c
deleted file mode 100644
index 0df2c8f4c6..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/getdents64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* getdents64 is in getdents.c */
diff --git a/sysdeps/unix/sysv/linux/alpha/readdir.c b/sysdeps/unix/sysv/linux/alpha/readdir.c
deleted file mode 100644
index 300ebb2629..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/readdir.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#define readdir64 __no_readdir64_decl
-#define __readdir64 __no___readdir64_decl
-#include <sysdeps/unix/readdir.c>
-#undef __readdir64
-strong_alias (__readdir, __readdir64)
-#undef readdir64
-weak_alias (__readdir, readdir64)
diff --git a/sysdeps/unix/sysv/linux/alpha/readdir64.c b/sysdeps/unix/sysv/linux/alpha/readdir64.c
deleted file mode 100644
index 9796431dc4..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/readdir64.c
+++ /dev/null
@@ -1 +0,0 @@
-/* readdir64 is in readdir.c */
diff --git a/sysdeps/unix/sysv/linux/alpha/readdir64_r.c b/sysdeps/unix/sysv/linux/alpha/readdir64_r.c
deleted file mode 100644
index b8fe9a31b4..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/readdir64_r.c
+++ /dev/null
@@ -1 +0,0 @@
-/* readdir64_r is in readdir_r.c */
diff --git a/sysdeps/unix/sysv/linux/alpha/readdir_r.c b/sysdeps/unix/sysv/linux/alpha/readdir_r.c
deleted file mode 100644
index adb92db6af..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/readdir_r.c
+++ /dev/null
@@ -1,4 +0,0 @@
-#define readdir64_r __no_readdir64_r_decl
-#include <sysdeps/unix/readdir_r.c>
-#undef readdir64_r
-weak_alias (__readdir_r, readdir64_r)
diff --git a/sysdeps/unix/sysv/linux/arm/Versions b/sysdeps/unix/sysv/linux/arm/Versions
index 5498086253..aeda9fa5fb 100644
--- a/sysdeps/unix/sysv/linux/arm/Versions
+++ b/sysdeps/unix/sysv/linux/arm/Versions
@@ -17,6 +17,9 @@ libc {
# a*
alphasort64;
+ # g*
+ glob64;
+
# New rlimit interface
getrlimit; setrlimit; getrlimit64;
diff --git a/sysdeps/unix/sysv/linux/arm/glob64.c b/sysdeps/unix/sysv/linux/arm/glob64.c
new file mode 100644
index 0000000000..82a9a296a7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/arm/glob64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/glob64.c>
diff --git a/sysdeps/unix/sysv/linux/i386/Versions b/sysdeps/unix/sysv/linux/i386/Versions
index b7af24b1b3..3015c41451 100644
--- a/sysdeps/unix/sysv/linux/i386/Versions
+++ b/sysdeps/unix/sysv/linux/i386/Versions
@@ -19,6 +19,9 @@ libc {
# a*
alphasort64;
+ # g*
+ glob64;
+
# New rlimit interface
getrlimit; setrlimit; getrlimit64;
diff --git a/sysdeps/unix/sysv/linux/i386/glob64.c b/sysdeps/unix/sysv/linux/i386/glob64.c
new file mode 100644
index 0000000000..9f32742034
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/i386/glob64.c
@@ -0,0 +1,48 @@
+#include <dirent.h>
+#include <glob.h>
+#include <sys/stat.h>
+
+#define dirent dirent64
+#define __readdir(dirp) __readdir64 (dirp)
+
+#define glob_t glob64_t
+#define glob(pattern, flags, errfunc, pglob) \
+ __glob64 (pattern, flags, errfunc, pglob)
+#define globfree(pglob) globfree64 (pglob)
+
+#undef stat
+#define stat stat64
+#undef __stat
+#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf)
+
+#define NO_GLOB_PATTERN_P 1
+
+#include <sysdeps/generic/glob.c>
+
+#include "shlib-compat.h"
+
+versioned_symbol (libc, __glob64, glob64, GLIBC_2_2);
+
+#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
+
+#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
+
+int __old_glob64 (__const char *__pattern, int __flags,
+ int (*__errfunc) (__const char *, int),
+ glob64_t *__pglob);
+
+#undef dirent
+#define dirent __old_dirent64
+#undef __readdir
+#define __readdir(dirp) __old_readdir64 (dirp)
+#undef glob
+#define glob(pattern, flags, errfunc, pglob) \
+ __old_glob64 (pattern, flags, errfunc, pglob)
+#define glob_in_dir __old_glob_in_dir
+
+#define GLOB_ONLY_P 1
+
+#include <sysdeps/generic/glob.c>
+
+compat_symbol (libc, __old_glob64, glob64, GLIBC_2_1);
+#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/readdir.c b/sysdeps/unix/sysv/linux/ia64/readdir.c
index e64b2f8bdd..300ebb2629 100644
--- a/sysdeps/unix/sysv/linux/ia64/readdir.c
+++ b/sysdeps/unix/sysv/linux/ia64/readdir.c
@@ -1 +1,7 @@
-#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
+#define readdir64 __no_readdir64_decl
+#define __readdir64 __no___readdir64_decl
+#include <sysdeps/unix/readdir.c>
+#undef __readdir64
+strong_alias (__readdir, __readdir64)
+#undef readdir64
+weak_alias (__readdir, readdir64)
diff --git a/sysdeps/unix/sysv/linux/ia64/readdir_r.c b/sysdeps/unix/sysv/linux/ia64/readdir_r.c
index fc5818fa19..adb92db6af 100644
--- a/sysdeps/unix/sysv/linux/ia64/readdir_r.c
+++ b/sysdeps/unix/sysv/linux/ia64/readdir_r.c
@@ -1 +1,4 @@
-#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
+#define readdir64_r __no_readdir64_r_decl
+#include <sysdeps/unix/readdir_r.c>
+#undef readdir64_r
+weak_alias (__readdir_r, readdir64_r)
diff --git a/sysdeps/unix/sysv/linux/powerpc/Versions b/sysdeps/unix/sysv/linux/powerpc/Versions
index 1ea93d74f3..a2296a968a 100644
--- a/sysdeps/unix/sysv/linux/powerpc/Versions
+++ b/sysdeps/unix/sysv/linux/powerpc/Versions
@@ -9,6 +9,9 @@ libc {
# functions used in other libraries
__xstat64; __fxstat64; __lxstat64;
+ # g*
+ glob64;
+
# New rlimit interface
getrlimit; setrlimit; getrlimit64; setrlimit64;
diff --git a/sysdeps/unix/sysv/linux/powerpc/glob64.c b/sysdeps/unix/sysv/linux/powerpc/glob64.c
new file mode 100644
index 0000000000..82a9a296a7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/powerpc/glob64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/glob64.c>
diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c
index 9341e3bd13..fa815e9581 100644
--- a/sysdeps/unix/sysv/linux/readdir64.c
+++ b/sysdeps/unix/sysv/linux/readdir64.c
@@ -4,11 +4,4 @@
#include <sysdeps/unix/readdir.c>
-#include <shlib-compat.h>
-
-versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
-
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__readdir64, __old_readdir64)
-compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1);
-#endif
+weak_alias(__readdir64, readdir64)
diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c
index 63a6b80f95..d63680bf9a 100644
--- a/sysdeps/unix/sysv/linux/readdir64_r.c
+++ b/sysdeps/unix/sysv/linux/readdir64_r.c
@@ -4,11 +4,4 @@
#include <sysdeps/unix/readdir_r.c>
-#include <shlib-compat.h>
-
-versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2);
-
-#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
-strong_alias (__readdir64_r, __old_readdir64_r)
-compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1);
-#endif
+weak_alias(__readdir64_r, readdir64_r)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/Versions b/sysdeps/unix/sysv/linux/sparc/sparc32/Versions
index 2448fa2d37..d7a19f812a 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/Versions
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/Versions
@@ -9,6 +9,9 @@ libc {
# functions used in other libraries
__xstat64; __fxstat64; __lxstat64;
+ # g*
+ glob64;
+
# r*
readdir64; readdir64_r;
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c
new file mode 100644
index 0000000000..82a9a296a7
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/glob64.c>
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
index e64b2f8bdd..300ebb2629 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c
@@ -1 +1,7 @@
-#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
+#define readdir64 __no_readdir64_decl
+#define __readdir64 __no___readdir64_decl
+#include <sysdeps/unix/readdir.c>
+#undef __readdir64
+strong_alias (__readdir, __readdir64)
+#undef readdir64
+weak_alias (__readdir, readdir64)
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c
index fc5818fa19..adb92db6af 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c
@@ -1 +1,4 @@
-#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
+#define readdir64_r __no_readdir64_r_decl
+#include <sysdeps/unix/readdir_r.c>
+#undef readdir64_r
+weak_alias (__readdir_r, readdir64_r)