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.

	* string/strfry.c: Add some more randomness to the seed.
	Patch by James A Morrison <ja2morri@student.math.uwaterloo.ca>.

	Patch by James Antill <james@anqd.org> [PR libc/2787].
This commit is contained in:
Ulrich Drepper 2002-03-12 00:38:37 +00:00
parent 14b2815be9
commit 89a3dd449a
9 changed files with 99 additions and 14 deletions

View File

@ -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>

View File

@ -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
/*
*/

View File

@ -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;
}

View File

@ -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

View File

@ -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

33
sysdeps/sparc/sparc64/configure vendored Normal file
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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" \