From 60f0e64b3c13cf717fd49d327dbbca88568ca647 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 19 Aug 2000 16:58:09 +0000 Subject: Update. * malloc/mtrace.pl (usage): Inform about --help. 2000-08-19 Wolfram Gloger * malloc/malloc.c (new_heap): try harder to get an aligned chunk of size HEAP_MAX_SIZE. 2000-08-19 Andreas Jaeger * shlib-versions: Remove libnss_db, libdb and libdb1. 2000-08-19 Jakub Jelinek * 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 * 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 * malloc/Makefile (memusage): libmemusage.so is installed in slibdir. 2000-08-17 Andreas Jaeger * 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 * 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 --- ChangeLog | 76 ++++++ include/glob.h | 3 + malloc/Makefile | 2 +- malloc/malloc.c | 22 +- malloc/mtrace.pl | 2 +- math/test-fenv.c | 268 ++++++++++++++++++++-- shlib-versions | 9 - sysdeps/alpha/fpu/bits/fenv.h | 26 ++- sysdeps/alpha/fpu/fclrexcpt.c | 4 +- sysdeps/alpha/fpu/fedisblxcpt.c | 6 +- sysdeps/alpha/fpu/feenablxcpt.c | 6 +- sysdeps/alpha/fpu/fegetenv.c | 8 +- sysdeps/alpha/fpu/fegetexcept.c | 4 +- sysdeps/alpha/fpu/fegetround.c | 6 +- sysdeps/alpha/fpu/feholdexcpt.c | 6 +- sysdeps/alpha/fpu/fesetenv.c | 6 +- sysdeps/alpha/fpu/fesetround.c | 7 +- sysdeps/alpha/fpu/feupdateenv.c | 4 +- sysdeps/alpha/fpu/fgetexcptflg.c | 4 +- sysdeps/alpha/fpu/fraiseexcpt.c | 5 +- sysdeps/alpha/fpu/fsetexcptflg.c | 4 +- sysdeps/alpha/fpu/ftestexcept.c | 6 +- sysdeps/generic/glob.c | 19 +- sysdeps/unix/sysv/linux/alpha/getdents.c | 6 +- sysdeps/unix/sysv/linux/alpha/getdents64.c | 1 - sysdeps/unix/sysv/linux/alpha/readdir.c | 7 - sysdeps/unix/sysv/linux/alpha/readdir64.c | 1 - sysdeps/unix/sysv/linux/alpha/readdir64_r.c | 1 - sysdeps/unix/sysv/linux/alpha/readdir_r.c | 4 - sysdeps/unix/sysv/linux/arm/Versions | 3 + sysdeps/unix/sysv/linux/arm/glob64.c | 1 + sysdeps/unix/sysv/linux/i386/Versions | 3 + sysdeps/unix/sysv/linux/i386/glob64.c | 48 ++++ sysdeps/unix/sysv/linux/ia64/readdir.c | 8 +- sysdeps/unix/sysv/linux/ia64/readdir_r.c | 5 +- sysdeps/unix/sysv/linux/powerpc/Versions | 3 + sysdeps/unix/sysv/linux/powerpc/glob64.c | 1 + sysdeps/unix/sysv/linux/readdir64.c | 9 +- sysdeps/unix/sysv/linux/readdir64_r.c | 9 +- sysdeps/unix/sysv/linux/sparc/sparc32/Versions | 3 + sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c | 1 + sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c | 8 +- sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c | 5 +- 43 files changed, 517 insertions(+), 113 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/alpha/getdents64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/readdir.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/readdir64.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/readdir64_r.c delete mode 100644 sysdeps/unix/sysv/linux/alpha/readdir_r.c create mode 100644 sysdeps/unix/sysv/linux/arm/glob64.c create mode 100644 sysdeps/unix/sysv/linux/i386/glob64.c create mode 100644 sysdeps/unix/sysv/linux/powerpc/glob64.c create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c diff --git a/ChangeLog b/ChangeLog index ca1f8228f2..40b76c5bae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,79 @@ +2000-08-19 Andreas Jaeger + + * malloc/mtrace.pl (usage): Inform about --help. + +2000-08-19 Wolfram Gloger + + * malloc/malloc.c (new_heap): try harder to get an aligned chunk of + size HEAP_MAX_SIZE. + +2000-08-19 Andreas Jaeger + + * shlib-versions: Remove libnss_db, libdb and libdb1. + +2000-08-19 Jakub Jelinek + + * 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 + + * 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 + + * malloc/Makefile (memusage): libmemusage.so is installed in slibdir. + +2000-08-17 Andreas Jaeger + + * 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 + + * 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 * elf/constload1.c: Include for puts prototype. diff --git a/include/glob.h b/include/glob.h index fce761869d..d248cf6bc1 100644 --- a/include/glob.h +++ b/include/glob.h @@ -3,5 +3,8 @@ /* Now define the internal interfaces. */ extern int __glob_pattern_p (__const char *__pattern, int __quote); +extern int __glob64 (__const char *__pattern, int __flags, + int (*__errfunc) (__const char *, int), + glob64_t *__pglob); #endif diff --git a/malloc/Makefile b/malloc/Makefile index 7cec63dde4..07acdcf0f7 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -109,7 +109,7 @@ $(objpfx)mtrace: mtrace.pl $(objpfx)memusage: memusage.sh rm -f $@.new sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \ - -e 's|@LIBDIR@|$(libdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \ + -e 's|@LIBDIR@|$(slibdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \ && rm -f $@ && mv $@.new $@ && chmod +x $@ diff --git a/malloc/malloc.c b/malloc/malloc.c index af20ca22bf..9ae5b6ef24 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -2013,12 +2013,22 @@ new_heap(size) size_t size; mapping (on Linux, this is the case for all non-writable mappings anyway). */ p1 = (char *)MMAP(0, HEAP_MAX_SIZE<<1, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE); - if(p1 == MAP_FAILED) - return 0; - p2 = (char *)(((unsigned long)p1 + HEAP_MAX_SIZE) & ~(HEAP_MAX_SIZE-1)); - ul = p2 - p1; - munmap(p1, ul); - munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul); + if(p1 != MAP_FAILED) { + p2 = (char *)(((unsigned long)p1 + HEAP_MAX_SIZE) & ~(HEAP_MAX_SIZE-1)); + ul = p2 - p1; + munmap(p1, ul); + munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul); + } else { + /* Try to take the chance that an allocation of only HEAP_MAX_SIZE + is already aligned. */ + p2 = (char *)MMAP(0, HEAP_MAX_SIZE, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE); + if(p2 == MAP_FAILED) + return 0; + if((unsigned long)p2 & (HEAP_MAX_SIZE-1)) { + munmap(p2, HEAP_MAX_SIZE); + return 0; + } + } if(mprotect(p2, size, PROT_READ|PROT_WRITE) != 0) { munmap(p2, HEAP_MAX_SIZE); return 0; diff --git a/malloc/mtrace.pl b/malloc/mtrace.pl index aff04d35c5..8be50f466e 100644 --- a/malloc/mtrace.pl +++ b/malloc/mtrace.pl @@ -69,7 +69,7 @@ if ($#ARGV == 0) { $binary=$ARGV[0]; $data=$ARGV[1]; } else { - die "Wrong number of arguments."; + die "Wrong number of arguments, run $progname --help for help."; } sub location { diff --git a/math/test-fenv.c b/math/test-fenv.c index b87f68763e..03e4877761 100644 --- a/math/test-fenv.c +++ b/math/test-fenv.c @@ -1,6 +1,6 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. This file is part of the GNU C Library. - Contributed by Andreas Jaeger and + Contributed by Andreas Jaeger and Ulrich Drepper , 1997. The GNU C Library is free software; you can redistribute it and/or @@ -343,31 +343,273 @@ feenv_mask_test (const char *flag_name, int fe_exc) } } +/* Test that program aborts with no masked interrupts */ +static void +feexcp_nomask_test (const char *flag_name, int fe_exc) +{ + int status; + pid_t pid; + printf ("Test: after fedisable (%s) processes will abort\n"); + printf (" when feraiseexcept (%s) is called.\n", flag_name, flag_name); + pid = fork (); + if (pid == 0) + { +#ifdef RLIMIT_CORE + /* Try to avoid dumping core. */ + struct rlimit core_limit; + core_limit.rlim_cur = 0; + core_limit.rlim_max = 0; + setrlimit (RLIMIT_CORE, &core_limit); +#endif + fedisableexcept (FE_ALL_EXCEPT); + feenableexcept (fe_exc); + feraiseexcept (fe_exc); + exit (2); + } + else if (pid < 0) + { + if (errno != ENOSYS) + { + printf (" Fail: Could not fork.\n"); + ++count_errors; + } + else + printf (" `fork' not implemented, test ignored.\n"); + } + else { + if (waitpid (pid, &status, 0) != pid) + { + printf (" Fail: waitpid call failed.\n"); + ++count_errors; + } + else if (WIFSIGNALED (status) && WTERMSIG (status) == SIGFPE) + printf (" Pass: Process received SIGFPE.\n"); + else + { + printf (" Fail: Process didn't receive signal and exited with status %d.\n", + status); + ++count_errors; + } + } +} + +/* Test that program doesn't abort with exception. */ static void -feenv_tests (void) +feexcp_mask_test (const char *flag_name, int fe_exc) { + int status; + pid_t pid; + printf ("Test: after fedisable (%s) processes will not abort\n"); + printf (" when feraiseexcept (%s) is called.\n", flag_name, flag_name); + pid = fork (); + if (pid == 0) + { +#ifdef RLIMIT_CORE + /* Try to avoid dumping core. */ + struct rlimit core_limit; + core_limit.rlim_cur = 0; + core_limit.rlim_max = 0; + setrlimit (RLIMIT_CORE, &core_limit); +#endif + feenableexcept (FE_ALL_EXCEPT); + fedisableexcept (fe_exc); + feraiseexcept (fe_exc); + exit (2); + } + else if (pid < 0) + { + if (errno != ENOSYS) + { + printf (" Fail: Could not fork.\n"); + ++count_errors; + } + else + printf (" `fork' not implemented, test ignored.\n"); + } + else { + if (waitpid (pid, &status, 0) != pid) + { + printf (" Fail: waitpid call failed.\n"); + ++count_errors; + } + else if (WIFEXITED (status) && WEXITSTATUS (status) == 2) + printf (" Pass: Process exited normally.\n"); + else + { + printf (" Fail: Process exited abnormally with status %d.\n", + status); + ++count_errors; + } + } +} + + +/* Tests for feenableexcept/fedisableexcept/fegetexcept. */ +static void +feenable_test (const char *flag_name, int fe_exc) +{ + int excepts; + + + printf ("Tests for feenableexcepts etc. with flag %s\n", flag_name); + + /* First disable all exceptions. */ + if (fedisableexcept (FE_ALL_EXCEPT) == -1) + { + printf ("Test: fedisableexcept (FE_ALL_EXCEPT) failed\n"); + ++count_errors; + /* If this fails, the other tests don't make sense. */ + return; + } + excepts = fegetexcept (); + if (excepts != 0) + { + printf ("Test: fegetexcept (%s) failed, return should be 0, is %d\n", + flag_name, excepts); + ++count_errors; + } + + excepts = feenableexcept (fe_exc); + if (excepts == -1) + { + printf ("Test: feenableexcept (%s) failed\n", flag_name); + ++count_errors; + return; + } + if (excepts != 0) + { + printf ("Test: feenableexcept (%s) failed, return should be 0, is %x\n", + flag_name, excepts); + ++count_errors; + } + + excepts = fegetexcept (); + if (excepts != fe_exc) + { + printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n", + flag_name, fe_exc, excepts); + ++count_errors; + } + + /* And now disable the exception again. */ + excepts = fedisableexcept (fe_exc); + if (excepts == -1) + { + printf ("Test: fedisableexcept (%s) failed\n", flag_name); + ++count_errors; + return; + } + if (excepts != fe_exc) + { + printf ("Test: fedisableexcept (%s) failed, return should be 0x%x, is 0x%x\n", + flag_name, fe_exc, excepts); + ++count_errors; + } + + excepts = fegetexcept (); + if (excepts != 0) + { + printf ("Test: fegetexcept (%s) failed, return should be 0, is 0x%x\n", + flag_name, excepts); + ++count_errors; + } + + /* Now the other way round: Enable all exceptions and disable just this one. */ + if (feenableexcept (FE_ALL_EXCEPT) == -1) + { + printf ("Test: feenableexcept (FE_ALL_EXCEPT) failed\n"); + ++count_errors; + /* If this fails, the other tests don't make sense. */ + return; + } + + excepts = fegetexcept (); + if (excepts != FE_ALL_EXCEPT) + { + printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n", + flag_name, FE_ALL_EXCEPT, excepts); + ++count_errors; + } + + excepts = fedisableexcept (fe_exc); + if (excepts == -1) + { + printf ("Test: fedisableexcept (%s) failed\n", flag_name); + ++count_errors; + return; + } + if (excepts != FE_ALL_EXCEPT) + { + printf ("Test: fedisableexcept (%s) failed, return should be 0, is 0x%x\n", + flag_name, excepts); + ++count_errors; + } + + excepts = fegetexcept (); + if (excepts != (FE_ALL_EXCEPT & ~fe_exc)) + { + printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n", + flag_name, (FE_ALL_EXCEPT & ~fe_exc), excepts); + ++count_errors; + } + + /* And now enable the exception again. */ + excepts = feenableexcept (fe_exc); + if (excepts == -1) + { + printf ("Test: feenableexcept (%s) failed\n", flag_name); + ++count_errors; + return; + } + if (excepts != (FE_ALL_EXCEPT & ~fe_exc)) + { + printf ("Test: feenableexcept (%s) failed, return should be 0, is 0x%x\n", + flag_name, excepts); + ++count_errors; + } + + excepts = fegetexcept (); + if (excepts != FE_ALL_EXCEPT) + { + printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n", + flag_name, FE_ALL_EXCEPT, excepts); + ++count_errors; + } + feexcp_nomask_test (flag_name, fe_exc); + feexcp_mask_test (flag_name, fe_exc); + +} + + +static void +fe_single_test (const char *flag_name, int fe_exc) +{ + feenv_nomask_test (flag_name, fe_exc); + feenv_mask_test (flag_name, fe_exc); + feenable_test (flag_name, fe_exc); +} + + +static void +feenv_tests (void) +{ #ifdef FE_DIVBYZERO - feenv_nomask_test ("FE_DIVBYZERO", FE_DIVBYZERO); - feenv_mask_test ("FE_DIVBYZERO", FE_DIVBYZERO); + fe_single_test ("FE_DIVBYZERO", FE_DIVBYZERO); #endif #ifdef FE_INVALID - feenv_nomask_test ("FE_INVALID", FE_INVALID); - feenv_mask_test ("FE_INVALID", FE_INVALID); + fe_single_test ("FE_INVALID", FE_INVALID); #endif #ifdef FE_INEXACT - feenv_nomask_test ("FE_INEXACT", FE_INEXACT); - feenv_mask_test ("FE_INEXACT", FE_INEXACT); + fe_single_test ("FE_INEXACT", FE_INEXACT); #endif #ifdef FE_UNDERFLOW - feenv_nomask_test ("FE_UNDERFLOW", FE_UNDERFLOW); - feenv_mask_test ("FE_UNDERFLOW", FE_UNDERFLOW); + fe_single_test ("FE_UNDERFLOW", FE_UNDERFLOW); #endif #ifdef FE_OVERFLOW - feenv_nomask_test ("FE_OVERFLOW", FE_OVERFLOW); - feenv_mask_test ("FE_OVERFLOW", FE_OVERFLOW); + fe_single_test ("FE_OVERFLOW", FE_OVERFLOW); #endif fesetenv (FE_DFL_ENV); } diff --git a/shlib-versions b/shlib-versions index 35186106ae..33bfdeec90 100644 --- a/shlib-versions +++ b/shlib-versions @@ -85,7 +85,6 @@ mips.*-.*-linux.* libresolv=2 GLIBC_2.0 GLIBC_2.2 # names given in /etc/nsswitch.conf. mips.*-.*-linux.* libnss_files=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libnss_dns=2 GLIBC_2.0 GLIBC_2.2 -mips.*-.*-linux.* libnss_db=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libnss_compat=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libnss_nis=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libnss_nisplus=2 GLIBC_2.0 GLIBC_2.2 @@ -93,7 +92,6 @@ mips.*-.*-linux.* libnss_ldap=2 GLIBC_2.0 GLIBC_2.2 mips.*-.*-linux.* libnss_hesiod=2 GLIBC_2.0 GLIBC_2.2 .*-.*-.* libnss_files=2 .*-.*-.* libnss_dns=2 -.*-.*-.* libnss_db=2 .*-.*-.* libnss_compat=2 .*-.*-.* libnss_nis=2 .*-.*-.* libnss_nisplus=2 @@ -105,13 +103,6 @@ alpha.*-.*-linux.* libnsl=1.1 mips.*-.*-linux.* libnsl=1 GLIBC_2.0 GLIBC_2.2 .*-.*-.* libnsl=1 -# We use libdb.so.3 for the interface in version 2.x of the Berkeley DB code. -.*-.*-.* libdb=3 -# This is the Berkeley DB 1.85. We use the version numbers from glibc 2.0.* -# for all times. -alpha-.*-linux.* libdb1=2.1 -.*-.*-.* libdb1=2 - # This defines the shared library version numbers we will install. alpha.*-.*-linux.* libcrypt=1.1 .*-.*-.* libcrypt=1 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 +#include 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 +#include 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 +#include 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 +#include 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 +#include 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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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 +#include 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 , 1997 @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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 +#include 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 +#include 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 -#include +#include 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 +#include 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 , 1997. @@ -18,7 +18,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include +#include 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 @@ -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 -#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 -#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 -#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 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 +#include +#include + +#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 + +#include "shlib-compat.h" + +versioned_symbol (libc, __glob64, glob64, GLIBC_2_2); + +#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) + +#include + +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 + +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 +#define readdir64 __no_readdir64_decl +#define __readdir64 __no___readdir64_decl +#include +#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 +#define readdir64_r __no_readdir64_r_decl +#include +#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 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 -#include - -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 -#include - -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 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 +#define readdir64 __no_readdir64_decl +#define __readdir64 __no___readdir64_decl +#include +#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 +#define readdir64_r __no_readdir64_r_decl +#include +#undef readdir64_r +weak_alias (__readdir_r, readdir64_r) -- cgit v1.2.3