2002-02-28  Jakub Jelinek  <jakub@redhat.com>

	* elf/rtld.c (_rtld_global): Remove .protected.
	(_rtld_local): Strong alias to _rtld_global.
	* elf/Makefile (CFLAGS-.os): Add -D_RTLD_LOCAL if compiling rtld
	only .os object.
	* sysdeps/generic/ldsodefs.h (GL): If SHARED and _RTLD_LOCAL, use
	_rtld_local instead of _rtld_global.
	(_rtld_local): Add hidden extern, possibly in .sdata section.
	* configure.in: Add tests for visibility attribute and .sdata.
	* config.h.in: Add HAVE_VISIBILITY_ATTRIBUTE and HAVE_SDATA_SECTION.
	* sysdeps/alpha/dl-machine.h: Use _rtld_local instead of _rtld_global.
	* sysdeps/arm/dl-machine.h: Likewise.
	* sysdeps/generic/ldsodefs.h: Likewise.
	* sysdeps/hppa/dl-machine.h: Likewise.
	* sysdeps/cris/dl-machine.h: Likewise.
	* sysdeps/i386/dl-machine.h: Likewise.
	* sysdeps/ia64/dl-machine.h: Likewise.
	* sysdeps/m68k/dl-machine.h: Likewise.
	* sysdeps/mips/mips64/dl-machine.h: Likewise.
	* sysdeps/mips/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
	* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
	* sysdeps/sh/dl-machine.h: Likewise.
	* sysdeps/s390/s390-32/dl-machine.h: Likewise.
	* sysdeps/s390/s390-64/dl-machine.h: Likewise.
	* sysdeps/x86_64/dl-machine.h: Likewise.
This commit is contained in:
Ulrich Drepper 2002-02-28 22:38:00 +00:00
parent 1eb610d162
commit 0d01dace55
24 changed files with 259 additions and 116 deletions

View File

@ -1,3 +1,31 @@
2002-02-28 Jakub Jelinek <jakub@redhat.com>
* elf/rtld.c (_rtld_global): Remove .protected.
(_rtld_local): Strong alias to _rtld_global.
* elf/Makefile (CFLAGS-.os): Add -D_RTLD_LOCAL if compiling rtld
only .os object.
* sysdeps/generic/ldsodefs.h (GL): If SHARED and _RTLD_LOCAL, use
_rtld_local instead of _rtld_global.
(_rtld_local): Add hidden extern, possibly in .sdata section.
* configure.in: Add tests for visibility attribute and .sdata.
* config.h.in: Add HAVE_VISIBILITY_ATTRIBUTE and HAVE_SDATA_SECTION.
* sysdeps/alpha/dl-machine.h: Use _rtld_local instead of _rtld_global.
* sysdeps/arm/dl-machine.h: Likewise.
* sysdeps/generic/ldsodefs.h: Likewise.
* sysdeps/hppa/dl-machine.h: Likewise.
* sysdeps/cris/dl-machine.h: Likewise.
* sysdeps/i386/dl-machine.h: Likewise.
* sysdeps/ia64/dl-machine.h: Likewise.
* sysdeps/m68k/dl-machine.h: Likewise.
* sysdeps/mips/mips64/dl-machine.h: Likewise.
* sysdeps/mips/dl-machine.h: Likewise.
* sysdeps/sparc/sparc32/dl-machine.h: Likewise.
* sysdeps/sparc/sparc64/dl-machine.h: Likewise.
* sysdeps/sh/dl-machine.h: Likewise.
* sysdeps/s390/s390-32/dl-machine.h: Likewise.
* sysdeps/s390/s390-64/dl-machine.h: Likewise.
* sysdeps/x86_64/dl-machine.h: Likewise.
2002-02-28 Ulrich Drepper <drepper@redhat.com>
* login/login.c (login): Always initialize ut_line field

View File

@ -102,6 +102,12 @@
/* Define if the assembler supported .protected. */
#undef HAVE_PROTECTED
/* Define if the compiler supports __attribute__ ((visibility (...))). */
#undef HAVE_VISIBILITY_ATTRIBUTE
/* Define if _rtld_local structure should be forced into .sdata section. */
#undef HAVE_SDATA_SECTION
/* Define if binutils support TLS handling. */
#undef HAVE_TLS_SUPPORT

168
configure vendored
View File

@ -2806,8 +2806,64 @@ echo "$ac_t""$libc_cv_asm_protected_directive" 1>&6
EOF
if test $libc_cv_asm_protected_directive = yes; then
echo $ac_n "checking whether __attribute__((visibility())) is supported""... $ac_c" 1>&6
echo "configure:2812: checking whether __attribute__((visibility())) is supported" >&5
if eval "test \"`echo '$''{'libc_cv_visibility_attribute'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int foo __attribute__ ((visibility ("hidden"))) = 1;
int bar __attribute__ ((visibility ("protected"))) = 1;
EOF
libc_cv_visibility_attribute=no
if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
if grep '\.hidden.*foo' conftest.s >/dev/null; then
if grep '\.protected.*bar' conftest.s >/dev/null; then
libc_cv_visibility_attribute=yes
fi
fi
fi
rm -f conftest.cs
fi
echo "$ac_t""$libc_cv_visibility_attribute" 1>&6
if test $libc_cv_visibility_attribute = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_VISIBILITY_ATTRIBUTE 1
EOF
fi
fi
if test $libc_cv_visibility_attribute = yes -a $gnu_ld = yes; then
echo $ac_n "checking whether to put _rtld_local into .sdata section""... $ac_c" 1>&6
echo "configure:2843: checking whether to put _rtld_local into .sdata section" >&5
if eval "test \"`echo '$''{'libc_cv_have_sdata_section'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo "int i;" > conftest.c
libc_cv_have_sdata_section=no
if ${CC-cc} -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
| grep '\.sdata' >/dev/null; then
libc_cv_have_sdata_section=yes
fi
rm -f conftest.c conftest.so
fi
echo "$ac_t""$libc_cv_have_sdata_section" 1>&6
if test $libc_cv_have_sdata_section = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_SDATA_SECTION 1
EOF
fi
fi
echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6
echo "configure:2811: checking for -z nodelete option" >&5
echo "configure:2867: checking for -z nodelete option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2816,7 +2872,7 @@ int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
-Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_nodelete=yes
else
@ -2829,7 +2885,7 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6
echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6
echo "configure:2833: checking for -z nodlopen option" >&5
echo "configure:2889: checking for -z nodlopen option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2838,7 +2894,7 @@ int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2842: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
-Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2898: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_nodlopen=yes
else
@ -2851,7 +2907,7 @@ echo "$ac_t""$libc_cv_z_nodlopen" 1>&6
echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6
echo "configure:2855: checking for -z initfirst option" >&5
echo "configure:2911: checking for -z initfirst option" >&5
if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2860,7 +2916,7 @@ int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2864: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
-Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_initfirst=yes
else
@ -2873,14 +2929,14 @@ echo "$ac_t""$libc_cv_z_initfirst" 1>&6
echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6
echo "configure:2877: checking for -Bgroup option" >&5
echo "configure:2933: checking for -Bgroup option" >&5
if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2884: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_Bgroup=yes
else
@ -2893,7 +2949,7 @@ echo "$ac_t""$libc_cv_Bgroup" 1>&6
echo $ac_n "checking for -z combreloc""... $ac_c" 1>&6
echo "configure:2897: checking for -z combreloc" >&5
echo "configure:2953: checking for -z combreloc" >&5
if eval "test \"`echo '$''{'libc_cv_z_combreloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -2904,7 +2960,7 @@ int foo (void) { return bar (mumble); }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostdlib -nostartfiles
-Wl,-z,combreloc 1>&5'; { (eval echo configure:2908: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
-Wl,-z,combreloc 1>&5'; { (eval echo configure:2964: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
libc_cv_z_combreloc=yes
@ -2929,12 +2985,12 @@ fi
if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:2933: checking for .init and .fini sections" >&5
echo "configure:2989: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2938 "configure"
#line 2994 "configure"
#include "confdefs.h"
int main() {
@ -2943,7 +2999,7 @@ asm (".section .init");
asm ("${libc_cv_dot_text}");
; return 0; }
EOF
if { (eval echo configure:2947: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_have_initfini=yes
else
@ -2966,7 +3022,7 @@ fi
if test $elf = yes -a $gnu_ld = yes; then
echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
echo "configure:2970: checking whether cc puts quotes around section names" >&5
echo "configure:3026: checking whether cc puts quotes around section names" >&5
if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3003,19 +3059,19 @@ if test $elf = yes; then
else
if test $ac_cv_prog_cc_works = yes; then
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:3007: checking for _ prefix on C symbol names" >&5
echo "configure:3063: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3012 "configure"
#line 3068 "configure"
#include "confdefs.h"
asm ("_glibc_foobar:");
int main() {
glibc_foobar ();
; return 0; }
EOF
if { (eval echo configure:3019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:3075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
libc_cv_asm_underscores=yes
else
@ -3030,17 +3086,17 @@ fi
echo "$ac_t""$libc_cv_asm_underscores" 1>&6
else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:3034: checking for _ prefix on C symbol names" >&5
echo "configure:3090: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3039 "configure"
#line 3095 "configure"
#include "confdefs.h"
void underscore_test(void) {
return; }
EOF
if { (eval echo configure:3044: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _underscore_test conftest* >/dev/null; then
rm -f conftest*
libc_cv_asm_underscores=yes
@ -3072,7 +3128,7 @@ if test $elf = yes; then
fi
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:3076: checking for assembler .weak directive" >&5
echo "configure:3132: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3095,7 +3151,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:3099: checking for assembler .weakext directive" >&5
echo "configure:3155: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3142,14 +3198,14 @@ EOF
;;
hppa*linux*)
echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6
echo "configure:3146: checking for assembler line separator" >&5
echo "configure:3202: checking for assembler line separator" >&5
if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.s <<EOF
nop ; is_old_puffin
EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3153: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_line_sep='!'
else
if test -z "$enable_hacker_mode"; then
@ -3171,7 +3227,7 @@ EOF
esac
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:3175: checking for ld --no-whole-archive" >&5
echo "configure:3231: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3182,7 +3238,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c 1>&5'; { (eval echo configure:3186: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:3242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes
else
libc_cv_ld_no_whole_archive=no
@ -3196,7 +3252,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then
fi
echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
echo "configure:3200: checking for gcc -fexceptions" >&5
echo "configure:3256: checking for gcc -fexceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3207,7 +3263,7 @@ __throw () {}
EOF
if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fexceptions
-o conftest conftest.c 1>&5'; { (eval echo configure:3211: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c 1>&5'; { (eval echo configure:3267: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_exceptions=yes
else
libc_cv_gcc_exceptions=no
@ -3222,14 +3278,14 @@ fi
if test "$base_machine" = alpha ; then
echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
echo "configure:3226: checking for function ..ng prefix" >&5
echo "configure:3282: checking for function ..ng prefix" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<\EOF
foo () { }
EOF
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3233: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3289: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_gcc_alpha_ng_prefix=yes
else
@ -3256,19 +3312,19 @@ if test "$host_cpu" = powerpc ; then
# Check for a bug present in at least versions 2.8.x of GCC
# and versions 1.0.x of EGCS.
echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
echo "configure:3260: checking whether clobbering cr0 causes problems" >&5
echo "configure:3316: checking whether clobbering cr0 causes problems" >&5
if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 3265 "configure"
#line 3321 "configure"
#include "confdefs.h"
int tester(int x) { asm ("" : : : "cc"); return x & 123; }
int main() {
; return 0; }
EOF
if { (eval echo configure:3272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:3328: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
libc_cv_c_asmcr0_bug='no'
else
@ -3290,12 +3346,12 @@ fi
fi
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
echo "configure:3294: checking for DWARF2 unwind info support" >&5
echo "configure:3350: checking for DWARF2 unwind info support" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3299 "configure"
#line 3355 "configure"
static char __EH_FRAME_BEGIN__;
_start ()
{
@ -3322,7 +3378,7 @@ __bzero () {}
EOF
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
-nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3326: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3382: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=static
else
libc_cv_gcc_dwarf2_unwind_info=no
@ -3330,7 +3386,7 @@ fi
if test $libc_cv_gcc_dwarf2_unwind_info = no; then
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
-nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3390: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=yes
else
libc_cv_gcc_dwarf2_unwind_info=no
@ -3360,12 +3416,12 @@ EOF
esac
echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
echo "configure:3364: checking for __builtin_expect" >&5
echo "configure:3420: checking for __builtin_expect" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3369 "configure"
#line 3425 "configure"
int foo (int a)
{
a = __builtin_expect (a, 10);
@ -3373,7 +3429,7 @@ int foo (int a)
}
EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3433: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_builtin_expect=yes
else
libc_cv_gcc_builtin_expect=no
@ -3390,7 +3446,7 @@ EOF
fi
echo $ac_n "checking for __builtin_memset""... $ac_c" 1>&6
echo "configure:3394: checking for __builtin_memset" >&5
echo "configure:3450: checking for __builtin_memset" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_memset'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3400,7 +3456,7 @@ void zero (void *x)
__builtin_memset (x, 0, 1000);
}
EOF
if { ac_try='${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null'; { (eval echo configure:3404: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
if { ac_try='${CC-cc} -O3 -S conftest.c -o - | fgrep "memset" > /dev/null'; { (eval echo configure:3460: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then
libc_cv_gcc_builtin_memset=no
else
@ -3418,12 +3474,12 @@ EOF
fi
echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6
echo "configure:3422: checking for local label subtraction" >&5
echo "configure:3478: checking for local label subtraction" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#line 3427 "configure"
#line 3483 "configure"
int foo (int a)
{
static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
@ -3436,7 +3492,7 @@ int foo (int a)
}
EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3496: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_subtract_local_labels=yes
else
libc_cv_gcc_subtract_local_labels=no
@ -3453,7 +3509,7 @@ EOF
fi
echo $ac_n "checking for libgd""... $ac_c" 1>&6
echo "configure:3457: checking for libgd" >&5
echo "configure:3513: checking for libgd" >&5
if test "$with_gd" != "no"; then
old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $libgd_include"
@ -3462,14 +3518,14 @@ if test "$with_gd" != "no"; then
old_LIBS="$LIBS"
LIBS="$LIBS -lgd -lpng -lz -lm"
cat > conftest.$ac_ext <<EOF
#line 3466 "configure"
#line 3522 "configure"
#include "confdefs.h"
#include <gd.h>
int main() {
gdImagePng (0, 0)
; return 0; }
EOF
if { (eval echo configure:3473: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:3529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
LIBGD=yes
else
@ -3489,7 +3545,7 @@ echo "$ac_t""$LIBGD" 1>&6
echo $ac_n "checking size of long double""... $ac_c" 1>&6
echo "configure:3493: checking size of long double" >&5
echo "configure:3549: checking size of long double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3497,7 +3553,7 @@ else
ac_cv_sizeof_long_double=0
else
cat > conftest.$ac_ext <<EOF
#line 3501 "configure"
#line 3557 "configure"
#include "confdefs.h"
#include <stdio.h>
int main()
@ -3508,7 +3564,7 @@ int main()
return(0);
}
EOF
if { (eval echo configure:3512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:3568: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long_double=`cat conftestval`
else
@ -3586,7 +3642,7 @@ if test "$uname" = "sysdeps/generic"; then
fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:3590: checking OS release for uname" >&5
echo "configure:3646: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3608,7 +3664,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:3612: checking OS version for uname" >&5
echo "configure:3668: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -3630,7 +3686,7 @@ else
fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:3634: checking stdio selection" >&5
echo "configure:3690: checking stdio selection" >&5
case $stdio in
libio) cat >> confdefs.h <<\EOF
@ -3644,7 +3700,7 @@ echo "$ac_t""$stdio" 1>&6
# Test for old glibc 2.0.x headers so that they can be removed properly
# Search only in includedir.
echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
echo "configure:3648: checking for old glibc 2.0.x headers" >&5
echo "configure:3704: checking for old glibc 2.0.x headers" >&5
if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
then
old_glibc_headers=yes
@ -3705,7 +3761,7 @@ if test $shared = default; then
fi
echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
echo "configure:3709: checking whether -fPIC is default" >&5
echo "configure:3765: checking whether -fPIC is default" >&5
if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else

View File

@ -1001,6 +1001,44 @@ EOF
AC_SUBST(libc_cv_asm_protected_directive)
AC_DEFINE(HAVE_PROTECTED)
if test $libc_cv_asm_protected_directive = yes; then
AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
libc_cv_visibility_attribute,
[cat > conftest.c <<EOF
int foo __attribute__ ((visibility ("hidden"))) = 1;
int bar __attribute__ ((visibility ("protected"))) = 1;
EOF
libc_cv_visibility_attribute=no
if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
if grep '\.hidden.*foo' conftest.s >/dev/null; then
if grep '\.protected.*bar' conftest.s >/dev/null; then
libc_cv_visibility_attribute=yes
fi
fi
fi
rm -f conftest.[cs]
])
if test $libc_cv_visibility_attribute = yes; then
AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
fi
fi
if test $libc_cv_visibility_attribute = yes -a $gnu_ld = yes; then
AC_CACHE_CHECK(whether to put _rtld_local into .sdata section,
libc_cv_have_sdata_section,
[echo "int i;" > conftest.c
libc_cv_have_sdata_section=no
if ${CC-cc} -shared -Wl,--verbose conftest.c -o conftest.so 2>&1 \
| grep '\.sdata' >/dev/null; then
libc_cv_have_sdata_section=yes
fi
rm -f conftest.c conftest.so
])
if test $libc_cv_have_sdata_section = yes; then
AC_DEFINE(HAVE_SDATA_SECTION)
fi
fi
AC_CACHE_CHECK(for -z nodelete option,
libc_cv_z_nodelete, [dnl
cat > conftest.c <<EOF

View File

@ -250,6 +250,8 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' -D'SLIBDIR="$(slibdi
CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
CFLAGS-cache.c = $(SYSCONF-FLAGS)
CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-D_RTLD_LOCAL)
test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
generated += $(addsuffix .so,$(strip $(modules-names)))

View File

@ -91,11 +91,7 @@ struct rtld_global _rtld_global =
._dl_hwcap_mask = HWCAP_IMPORTANT,
._dl_load_lock = _LIBC_LOCK_RECURSIVE_INITIALIZER
};
/* There must only be the definition in ld.so itself. */
#ifdef HAVE_PROTECTED
asm (".protected _rtld_global");
#endif
strong_alias (_rtld_global, _rtld_local);
static void dl_main (const ElfW(Phdr) *phdr, ElfW(Word) phnum,
ElfW(Addr) *user_entry);

View File

@ -1,5 +1,8 @@
2002-02-28 Ulrich Drepper <drepper@redhat.com>
* tests-mbwc/dat_strfmon.c (tst_strfmon_loc): Adjust test data for
Euro locales.
* locales/br_FR: Eliminate old national currencies of countries
participating in Euro. Make @euro files pure copies.
* locales/ca_ES: Likewise.

View File

@ -20,78 +20,78 @@ TST_STRFMON tst_strfmon_loc [] = {
{
{
/* #01 */
/*inp*/ { 23, "%n %% %i", 123.00 },
/*exp*/ { 0,1,22, "123,00 DM % 123,00 DEM" },
/*inp*/ { 24, "%n %% %i", 123.00 },
/*exp*/ { 0,1,23, "123,00 EUR % 123,00 EUR" },
},
{
/* #02 */
/*inp*/ { 23, "%n %% %i", 123.00 },
/*exp*/ { 0,1,22, "123,00 DM % 123,00 DEM" },
/*inp*/ { 24, "%n %% %i", 123.00 },
/*exp*/ { 0,1,23, "123,00 EUR % 123,00 EUR" },
},
{
/* #03 */
/*inp*/ { 22, "%n %% %i", 123.00 },
/*inp*/ { 23, "%n %% %i", 123.00 },
/*exp*/ { E2BIG,1,-1, "" },
},
{
/* #04 */
/*inp*/ { 30, "%n|%i", 1234.561 },
/*exp*/ { 0,1,24, "1.234,56 DM|1.234,56 DEM" },
/*inp*/ { 31, "%n|%i", 1234.561 },
/*exp*/ { 0,1,25, "1.234,56 EUR|1.234,56 EUR"},
},
{
/* #05 */
/*inp*/ { 32, "%n|%i", -1234.561 },
/*exp*/ { 0,1,26, "-1.234,56 DM|-1.234,56 DEM"},
/*inp*/ { 33, "%n|%i", -1234.561 },
/*exp*/ { 0,1,27, "-1.234,56 EUR|-1.234,56 EUR"},
},
{
/* #06 */
/*inp*/ { 32, "%12n|%12i", 1234.561 },
/*exp*/ { 0,1,25, " 1.234,56 DM|1.234,56 DEM"},
/*inp*/ { 33, "%13n|%12i", 1234.561 },
/*exp*/ { 0,1,26, " 1.234,56 EUR|1.234,56 EUR"},
},
{
/* #07 */
/*inp*/ { 32, "%12n|%12i", -1234.561 },
/*exp*/ { 0,1,26, "-1.234,56 DM|-1.234,56 DEM"},
/*inp*/ { 33, "%12n|%12i", -1234.561 },
/*exp*/ { 0,1,27, "-1.234,56 EUR|-1.234,56 EUR"},
},
{
/* #08 */
/*inp*/ { 32, "%#5n|%#5i", 1234.561 },
/*exp*/ { 0,1,28, " 1.234,56 DM| 1.234,56 DEM"},
/*inp*/ { 33, "%#5n|%#5i", 1234.561 },
/*exp*/ { 0,1,29, " 1.234,56 EUR| 1.234,56 EUR"},
},
{
/* #09 */
/*inp*/ { 32, "%#5n|%#5i", -1234.561 },
/*exp*/ { 0,1,28, "- 1.234,56 DM|- 1.234,56 DEM"},
/*inp*/ { 33, "%#5n|%#5i", -1234.561 },
/*exp*/ { 0,1,29, "- 1.234,56 EUR|- 1.234,56 EUR"},
},
{
/* #10 */
/*inp*/ { 32, "%=*#5n|%=*#5i", 1234.561 },
/*exp*/ { 0,1,28, " *1.234,56 DM| *1.234,56 DEM"},
/*inp*/ { 33, "%=*#5n|%=*#5i", 1234.561 },
/*exp*/ { 0,1,29, " *1.234,56 EUR| *1.234,56 EUR"},
},
{
/* #11 */
/*inp*/ { 32, "%=0#5n|%=0#5i", -1234.561 },
/*exp*/ { 0,1,28, "-01.234,56 DM|-01.234,56 DEM"},
/*inp*/ { 33, "%=0#5n|%=0#5i", -1234.561 },
/*exp*/ { 0,1,29, "-01.234,56 EUR|-01.234,56 EUR"},
},
{
/* #12 */
/*inp*/ { 32, "%^#5n|%^#5i", -1234.561 },
/*exp*/ { 0,1,26, "- 1234,56 DM|- 1234,56 DEM"},
/*inp*/ { 33, "%^#5n|%^#5i", -1234.561 },
/*exp*/ { 0,1,27, "- 1234,56 EUR|- 1234,56 EUR"},
},
{
/* #13 */
/*inp*/ { 32, "%#5.0n|%#5.0i", 1234.444 },
/*exp*/ { 0,1,22, " 1.234 DM| 1.234 DEM" },
/*inp*/ { 33, "%#5.0n|%#5.0i", 1234.444 },
/*exp*/ { 0,1,23, " 1.234 EUR| 1.234 EUR" },
},
{
/* #14 */
/*inp*/ { 32, "%#5.0n|%#5.4i", -1234.555 },
/*exp*/ { 0,1,27, "- 1.235 DM|- 1.234,5550 DEM"},
/*inp*/ { 33, "%#5.0n|%#5.4i", -1234.555 },
/*exp*/ { 0,1,28, "- 1.235 EUR|- 1.234,5550 EUR"},
},
{
/* #15 */
/*inp*/ { 32, "%(#5n|%!(#5i", -1234.561 },
/*exp*/ { 0,1,26, "( 1.234,56 DM)|( 1.234,56)"},
/*inp*/ { 33, "%(#5n|%!(#5i", -1234.561 },
/*exp*/ { 0,1,27, "( 1.234,56 EUR)|( 1.234,56)"},
},
{ is_last: 1 }
}

View File

@ -328,7 +328,7 @@ $fixup_stack_ret: \n\
" RTLD_START_SPECIAL_INIT " \n\
/* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
initializers. */ \n\
ldq $16, _rtld_global \n\
ldq $16, _rtld_local \n\
ldq $17, 0($sp) \n\
lda $18, 8($sp) \n\
s8addq $17, 8, $19 \n\

View File

@ -324,7 +324,7 @@ _dl_start_user:
.L_STACK_END:
.word __libc_stack_end(GOT)
.L_LOADED:
.word _rtld_global(GOT)
.word _rtld_local(GOT)
.previous\n\
");

View File

@ -212,7 +212,7 @@ _dl_start_user:
move.d $sp,$r12
addq 4,$r12
; main_map: at _dl_loaded.
move.d [$r0+_rtld_global:GOT16],$r9
move.d [$r0+_rtld_local:GOT16],$r9
move.d [$r9],$r10
move.d _dl_init_internal:PLTG,$r9
add.d $r0,$r9

View File

@ -199,7 +199,11 @@ typedef void (*receiver_fct) (int, const char *, const char *);
# define GL(name) _##name
#else
# define EXTERN
# define GL(name) _rtld_global._##name
# ifdef _RTLD_LOCAL
# define GL(name) _rtld_local._##name
# else
# define GL(name) _rtld_global._##name
# endif
struct rtld_global
{
#endif
@ -371,6 +375,19 @@ struct rtld_global
#ifdef SHARED
};
extern struct rtld_global _rtld_global;
# ifdef _RTLD_LOCAL
# ifdef HAVE_VISIBILITY_ATTRIBUTE
# ifdef HAVE_SDATA_SECTION
# define __rtld_local_attribute__ \
__attribute__ ((visibility ("hidden"), section (".sdata")))
# else
# define __rtld_local_attribute__ __attribute__ ((visibility ("hidden")))
# endif
# else
# define __rtld_local_attribute__
# endif
extern struct rtld_global _rtld_local __rtld_local_attribute__;
# endif
#endif
#undef EXTERN

View File

@ -362,8 +362,8 @@ asm ( \
" stw %r24,-44(%sp)\n" \
\
".Lnofix:\n" \
" addil LT'_rtld_global,%r19\n" \
" ldw RT'_rtld_global(%r1),%r26\n" \
" addil LT'_rtld_local,%r19\n" \
" ldw RT'_rtld_local(%r1),%r26\n" \
" bl set_dp, %r2\n" \
" ldw 0(%r26),%r26\n" \
\

View File

@ -239,11 +239,10 @@ _dl_start_user:\n\
" RTLD_START_SPECIAL_INIT "\n\
# Load the parameters again.\n\
# (eax, edx, ecx, *--esp) = (_dl_loaded, argc, argv, envp)\n\
movl _rtld_global@GOT(%ebx), %esi\n\
leal 8(%esp,%edx,4), %eax\n\
movl _rtld_local@GOTOFF(%ebx), %eax\n\
leal 8(%esp,%edx,4), %esi\n\
leal 4(%esp), %ecx\n\
pushl %eax\n\
movl (%esi), %eax\n\
pushl %esi\n\
# Call the function to run the initializers.\n\
call _dl_init_internal@PLT\n\
# Pass our finalizer function to the user in %edx, as per ELF ABI.\n\

View File

@ -381,7 +381,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
" { .mmi\n" \
" mov out3 = r11\n" \
" sub r17 = r17, r3 /* Substract _dl_skip_args. */\n" \
" addl out0 = @ltoff(_rtld_global), gp\n" \
" addl out0 = @gprel(_rtld_local), gp\n" \
" }\n" \
"1: /* Copy env. */\n" \
" { .mfi\n" \
@ -396,11 +396,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
" }\n" \
" { .mmb\n" \
" st8 [r10] = out1 /* Record the new argc. */\n" \
" ld8 out0 = [out0]\n" \
" ;;\n" \
" ld8 out0 = [out0] /* get the linkmap */\n" \
" }\n" \
" { .mmb\n" \
" ld8 out0 = [out0] /* get the linkmap */\n" \
" st8 [r2] = r17 /* Load the new _dl_argv. */\n" \
" br.call.sptk.many b0 = _dl_init_internal#\n" \
" ;;\n" \

View File

@ -176,7 +176,7 @@ _dl_start_user:\n\
pea 8(%sp, %d1*4)\n\
pea 8(%sp)\n\
move.l %d1, -(%sp)\n\
move.l ([_rtld_global@GOT.w, %a5]), -(%sp)\n\
move.l ([_rtld_local@GOT.w, %a5]), -(%sp)\n\
jbsr _dl_init_internal@PLTPC\n\
addq.l #8, %sp\n\
addq.l #8, %sp\n\

View File

@ -441,7 +441,7 @@ _dl_start_user:\n\
# Save back the modified argument count.\n\
sw $4, 0($29)\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
lw $4, _rtld_global\n\
lw $4, _rtld_local\n\
lw $5, 0($29)\n\
la $6, 4($29)\n\
sll $7, $5, 2\n\

View File

@ -480,7 +480,7 @@ _dl_start_user:\n\
# Save back the modified argument count.\n\
sd $4, 0($29)\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
ld $4, _rtld_global\n\
ld $4, _rtld_local\n\
ld $5, 0($29)\n\
dla $6, 4($29)\n\
dla $7, 8($29)\n\
@ -492,7 +492,7 @@ _dl_start_user:\n\
dla $31, _dl_fini\n\
# Jump to the user entry point.\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
lw $4, _rtld_global\n\
lw $4, _rtld_local\n\
lw $5, 0($29)\n\
la $6, 4($29)\n\
la $7, 8($29)\n\

View File

@ -287,7 +287,7 @@ _dl_start_user:\n\
# Call the function to run the initializers.\n\
# Load the parameters:\n\
# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
l %r2,_rtld_global@GOT(%r12)\n\
l %r2,_rtld_local@GOT(%r12)\n\
l %r2,0(%r2)\n\
l %r3,96(%r15)\n\
la %r4,100(%r15)\n\

View File

@ -262,7 +262,7 @@ _dl_start_user:\n\
# Call the function to run the initializers.\n\
# Load the parameters:\n\
# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
lghi %r2,_rtld_global@GOT
lghi %r2,_rtld_local@GOT
lg %r2,0(%r2,%r12)\n\
lg %r2,0(%r2)\n\
lg %r3,160(%r15)\n\

View File

@ -388,7 +388,7 @@ _dl_start_user:\n\
.L_dl_init:\n\
.long _dl_init_internal@PLT\n\
.L_dl_loaded:\n\
.long _rtld_global@GOT\n\
.long _rtld_local@GOT\n\
.L_dl_starting_up:\n\
.long _dl_starting_up@GOT\n\
.L_dl_fini:\n\

View File

@ -312,9 +312,9 @@ _dl_start_user:
bne 23b
add %i1, 8, %i1
/* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */
3: sethi %hi(_rtld_global), %o0
3: sethi %hi(_rtld_local), %o0
add %sp, 23*4, %o2
orcc %o0, %lo(_rtld_global), %o0
orcc %o0, %lo(_rtld_local), %o0
sll %i5, 2, %o3
ld [%l7+%o0], %o0
add %o3, 4, %o3

View File

@ -745,9 +745,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
" add %i1, 16, %i1\n" \
" stx %l5, [%l4]\n" \
" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \
"2: sethi %hi(_rtld_global), %o0\n" \
"2: sethi %hi(_rtld_local), %o0\n" \
" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \
" orcc %o0, %lo(_rtld_global), %o0\n" \
" orcc %o0, %lo(_rtld_local), %o0\n" \
" sllx %i5, 3, %o3\n" \
" ldx [%l7 + %o0], %o0\n" \
" add %o3, 8, %o3\n" \

View File

@ -250,7 +250,7 @@ _dl_start_user:\n\
# argc -> rsi\n\
movq %rdx, %rsi\n\
# _dl_loaded -> rdi\n\
movq _rtld_global@GOTPCREL(%rip), %rdi\n\
movq _rtld_local@GOTPCREL(%rip), %rdi\n\
movq (%rdi), %rdi\n\
# env -> rcx\n\
leaq 16(%rsp,%rdx,8), %rcx\n\