aboutsummaryrefslogtreecommitdiff
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
parent277723d891149ded87f4d7fbb080575c722bdf75 (diff)
downloadglibc-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>
-rw-r--r--ChangeLog76
-rw-r--r--include/glob.h3
-rw-r--r--malloc/Makefile2
-rw-r--r--malloc/malloc.c22
-rw-r--r--malloc/mtrace.pl2
-rw-r--r--math/test-fenv.c268
-rw-r--r--shlib-versions9
-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
43 files changed, 517 insertions, 113 deletions
diff --git a/ChangeLog b/ChangeLog
index ca1f8228f2..40b76c5bae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;