aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--config.h.in4
-rw-r--r--string/strfry.c6
-rwxr-xr-xsysdeps/i386/elf/configure2
-rw-r--r--sysdeps/i386/elf/configure.in2
-rw-r--r--sysdeps/sparc/sparc64/configure33
-rw-r--r--sysdeps/sparc/sparc64/configure.in26
-rw-r--r--sysdeps/sparc/sparc64/dl-machine.h17
-rw-r--r--sysdeps/sparc/sparc64/hp-timing.h8
9 files changed, 100 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index 691ca93..034ac72 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
+2002-03-11 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/i386/elf/configure.in: Fix comment.
+
+ * sysdeps/sparc/sparc64/configure.in: New.
+ * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): Fix
+ if .dynamic comes before .got.
+ * config.h.in (SPARC64_DYNAMIC_BEFORE_GOT): Add.
+
+ * sysdeps/sparc/sparc64/hp-timing.h (HP_TIMING_DIFF,
+ HP_TIMING_ACCUM): Fix typos.
+
2002-03-11 Ulrich Drepper <drepper@redhat.com>
+ * string/strfry.c: Add some more randomness to the seed.
+ Patch by James A Morrison <ja2morri@student.math.uwaterloo.ca>.
+
* po/es.po: Update from translation team.
* po/fr.po: Likewise.
@@ -7,7 +22,7 @@
* stdio-common/printf_fp.c (__printf_fp): Correct check for %F format
when determining type of format.
- Patch by James Antill <james@and.org> [PR libc/2787].
+ Patch by James Antill <james@anqd.org> [PR libc/2787].
2002-03-04 Jakub Jelinek <jakub@redhat.com>
diff --git a/config.h.in b/config.h.in
index dc831e5..42e7e48 100644
--- a/config.h.in
+++ b/config.h.in
@@ -140,6 +140,10 @@
/* Mach specific: define if the `host_page_size' RPC is available. */
#undef HAVE_HOST_PAGE_SIZE
+/* Sparc64 specific: define if .dynamic section comes before .got for
+ shared libs. */
+#undef SPARC64_DYNAMIC_BEFORE_GOT
+
/*
*/
diff --git a/string/strfry.c b/string/strfry.c
index 4bb2255..112dd4a 100644
--- a/string/strfry.c
+++ b/string/strfry.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992, 1996, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1992, 1996, 1999, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
#include <string.h>
#include <stdlib.h>
#include <time.h>
+#include <unistd.h>
char *
strfry (char *string)
@@ -31,7 +32,8 @@ strfry (char *string)
{
static char state[32];
rdata.state = NULL;
- __initstate_r (time ((time_t *) NULL), state, sizeof (state), &rdata);
+ __initstate_r (time ((time_t *) NULL) ^ getpid (),
+ state, sizeof (state), &rdata);
init = 1;
}
diff --git a/sysdeps/i386/elf/configure b/sysdeps/i386/elf/configure
index 1033f78..0e8003e 100755
--- a/sysdeps/i386/elf/configure
+++ b/sysdeps/i386/elf/configure
@@ -1,4 +1,4 @@
- # Local configure fragment for sysdeps/unix/sysv/linux.
+ # Local configure fragment for sysdeps/i386/elf.
if test "$usetls" != no; then
# Check for support of thread-local storage handling in assembler and
diff --git a/sysdeps/i386/elf/configure.in b/sysdeps/i386/elf/configure.in
index 96e9b2c..e83555e 100644
--- a/sysdeps/i386/elf/configure.in
+++ b/sysdeps/i386/elf/configure.in
@@ -1,6 +1,6 @@
sinclude(./aclocal.m4)dnl Autoconf lossage
GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
-# Local configure fragment for sysdeps/unix/sysv/linux.
+# Local configure fragment for sysdeps/i386/elf.
if test "$usetls" != no; then
# Check for support of thread-local storage handling in assembler and
diff --git a/sysdeps/sparc/sparc64/configure b/sysdeps/sparc/sparc64/configure
new file mode 100644
index 0000000..954ff7a
--- /dev/null
+++ b/sysdeps/sparc/sparc64/configure
@@ -0,0 +1,33 @@
+ # Local configure fragment for sysdeps/sparc/sparc64.
+
+# Check whether .got section comes before or after .dynamic
+echo $ac_n "checking where sparc64 .dynamic section comes before .got""... $ac_c" 1>&6
+echo "configure:6: checking where sparc64 .dynamic section comes before .got" >&5
+if eval "test \"`echo '$''{'libc_cv_sparc64_dynamic_before_got'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+${CC-cc} $CFLAGS -shared -Wl,--verbose 2>&1 \
+ | grep '^[ ]*\.\(got\|dynamic\)[^A-Za-z0-9_]' > conftest.order
+
+if test `cat conftest.order | wc -l` != 2; then
+ { echo "configure: error: Couldn't figure .got/.dynamic relative placement" 1>&2; exit 1; }
+else
+
+ if head -n 1 conftest.order | grep '^[ ]*\.got'; then
+ libc_cv_sparc64_dynamic_before_got=no
+ else
+ libc_cv_sparc64_dynamic_before_got=yes
+ fi
+
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$libc_cv_sparc64_dynamic_before_got" 1>&6
+if test $libc_cv_sparc64_dynamic_before_got = yes; then
+ cat >> confdefs.h <<\EOF
+#define SPARC64_DYNAMIC_BEFORE_GOT 1
+EOF
+
+fi
diff --git a/sysdeps/sparc/sparc64/configure.in b/sysdeps/sparc/sparc64/configure.in
new file mode 100644
index 0000000..30b0122
--- /dev/null
+++ b/sysdeps/sparc/sparc64/configure.in
@@ -0,0 +1,26 @@
+sinclude(./aclocal.m4)dnl Autoconf lossage
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/sparc/sparc64.
+
+# Check whether .got section comes before or after .dynamic
+AC_CACHE_CHECK(where sparc64 .dynamic section comes before .got,
+ libc_cv_sparc64_dynamic_before_got, [dnl
+changequote(,)
+${CC-cc} $CFLAGS -shared -Wl,--verbose 2>&1 \
+ | grep '^[ ]*\.\(got\|dynamic\)[^A-Za-z0-9_]' > conftest.order
+changequote([,])
+if test `cat conftest.order | wc -l` != 2; then
+ AC_ERROR(Couldn't figure .got/.dynamic relative placement)
+else
+ changequote(,)
+ if head -n 1 conftest.order | grep '^[ ]*\.got'; then
+ libc_cv_sparc64_dynamic_before_got=no
+ else
+ libc_cv_sparc64_dynamic_before_got=yes
+ fi
+ changequote([,])
+fi
+rm -f conftest*])
+if test $libc_cv_sparc64_dynamic_before_got = yes; then
+ AC_DEFINE(SPARC64_DYNAMIC_BEFORE_GOT)
+fi
diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
index 8d9bf7a..4ced7de 100644
--- a/sysdeps/sparc/sparc64/dl-machine.h
+++ b/sysdeps/sparc/sparc64/dl-machine.h
@@ -77,14 +77,19 @@ elf_machine_load_address (void)
The following method relies on the fact that sparcv9 ABI maximal
page length is 1MB and all ELF segments on sparc64 are aligned
- to 1MB. Also, it relies on _DYNAMIC coming after _GLOBAL_OFFSET_TABLE_
- and assumes that they both fit into the first 1MB of the RW segment.
- This should be true for some time unless ld.so grows too much, at the
- moment the whole stripped ld.so is 128KB and only smaller part of that
- is in the RW segment. */
-
+ to 1MB. Also assumes that they both fit into the first 1MB of
+ the RW segment. This should be true for some time unless ld.so
+ grows too much, at the moment the whole stripped ld.so is 128KB
+ and only smaller part of that is in the RW segment. */
+
+#ifdef SPARC64_DYNAMIC_BEFORE_GOT
+ /* If _DYNAMIC comes before _GLOBAL_OFFSET_TABLE_... */
+ return ((Elf64_Addr)elf_pic_register - *elf_pic_register) & ~0xfffffUL;
+#else
+ /* ... and if _DYNAMIC comes after _GLOBAL_OFFSET_TABLE_. */
return ((Elf64_Addr)elf_pic_register - *elf_pic_register + 0xfffff)
& ~0xfffffUL;
+#endif
}
/* We have 4 cases to handle. And we code different code sequences
diff --git a/sysdeps/sparc/sparc64/hp-timing.h b/sysdeps/sparc/sparc64/hp-timing.h
index 8475e15..f6cb89b 100644
--- a/sysdeps/sparc/sparc64/hp-timing.h
+++ b/sysdeps/sparc/sparc64/hp-timing.h
@@ -37,14 +37,14 @@ typedef unsigned long int hp_timing_t;
#define HP_TIMING_DIFF_INIT() \
do { \
int __cnt = 5; \
- GL(hp_timing_overhead) = ~0ull; \
+ GL(dl_hp_timing_overhead) = ~0ull; \
do \
{ \
hp_timing_t __t1, __t2; \
HP_TIMING_NOW (__t1); \
HP_TIMING_NOW (__t2); \
- if (__t2 - __t1 < GL(hp_timing_overhead)) \
- GL(hp_timing_overhead) = __t2 - __t1; \
+ if (__t2 - __t1 < GL(dl_hp_timing_overhead)) \
+ GL(dl_hp_timing_overhead) = __t2 - __t1; \
} \
while (--__cnt > 0); \
} while (0)
@@ -53,7 +53,7 @@ typedef unsigned long int hp_timing_t;
#define HP_TIMING_ACCUM(Sum, Diff) \
do { \
- hp_timing_t __diff = (Diff) - GL(hp_timing_overhead); \
+ hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
hp_timing_t tmp1, tmp2; \
__asm__ __volatile__("1: ldx [%3], %0\n\t" \
"add %0, %2, %1\n\t" \