diff options
| author | Ulrich Drepper <drepper@redhat.com> | 2000-08-19 16:58:09 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 2000-08-19 16:58:09 +0000 |
| commit | 60f0e64b3c13cf717fd49d327dbbca88568ca647 (patch) | |
| tree | 06093754479c7bbe18bed7bb50a905358290f42f | |
| parent | 277723d891149ded87f4d7fbb080575c722bdf75 (diff) | |
| download | glibc-60f0e64b3c13cf717fd49d327dbbca88568ca647.tar.xz 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>
43 files changed, 517 insertions, 113 deletions
@@ -1,5 +1,81 @@ 2000-08-19 Andreas Jaeger <aj@suse.de> + * 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> + * elf/constload1.c: Include <stdio.h> for puts prototype. 2000-08-19 Ulrich Drepper <drepper@redhat.com> 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 <aj@arthur.rhein-neckar.de> and + Contributed by Andreas Jaeger <aj@suse.de> and Ulrich Drepper <drepper@cygnus.com>, 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; |
