From 89a3dd449a782f369c9ba2af1e7933b69323c4ea Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 12 Mar 2002 00:38:37 +0000 Subject: Update. 2002-03-11 Jakub Jelinek * 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. * string/strfry.c: Add some more randomness to the seed. Patch by James A Morrison . Patch by James Antill [PR libc/2787]. --- ChangeLog | 17 ++++++++++++++++- config.h.in | 4 ++++ string/strfry.c | 6 ++++-- sysdeps/i386/elf/configure | 2 +- sysdeps/i386/elf/configure.in | 2 +- sysdeps/sparc/sparc64/configure | 33 +++++++++++++++++++++++++++++++++ sysdeps/sparc/sparc64/configure.in | 26 ++++++++++++++++++++++++++ sysdeps/sparc/sparc64/dl-machine.h | 17 +++++++++++------ sysdeps/sparc/sparc64/hp-timing.h | 8 ++++---- 9 files changed, 100 insertions(+), 15 deletions(-) create mode 100644 sysdeps/sparc/sparc64/configure create mode 100644 sysdeps/sparc/sparc64/configure.in diff --git a/ChangeLog b/ChangeLog index 691ca934c0..034ac72939 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ +2002-03-11 Jakub Jelinek + + * 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 + * string/strfry.c: Add some more randomness to the seed. + Patch by James A Morrison . + * 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 [PR libc/2787]. + Patch by James Antill [PR libc/2787]. 2002-03-04 Jakub Jelinek diff --git a/config.h.in b/config.h.in index dc831e51e6..42e7e48417 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 4bb22552f1..112dd4adb3 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 #include #include +#include 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 1033f78ef3..0e8003e236 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 96e9b2c9f3..e83555e92b 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 0000000000..954ff7a03d --- /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 0000000000..30b012205b --- /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 8d9bf7aa67..4ced7deef8 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 8475e15ae0..f6cb89b603 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" \ -- cgit 1.4.1