1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
2001-02-01  Ulrich Drepper  <drepper@redhat.com>

	* Makerules (build-shlib): Add $(extra-B-$(@F:lib%.so=%).so).
	* configure.in: Test for -z initfirst linker option.
	* config.make.in: Add have-z-initfirst.
	* elf/dl-init.c (_dl_init): Split out actual initialization code in
	new function call_init.  If _dl_initfirst is non-NULL initialize first.
	* elf/dl-load.c (_dl_map_from_fd): If DF_1_INITFIRST flag is set
	remember object in _dl_initfirst.
	* elf/soinit.c: Remove special support for calling
	__pthread_initialize_minimal.

	* conform/conformtest.pl: Add missing $prepend in type test.

	* elf/elf.h (SHT_CHECKSUM): New definition.

	* posix/tst-fnmatch.input: Add tests for [. .] in locales.
This commit is contained in:
Ulrich Drepper
2001-02-02 06:19:24 +00:00
parent 70dc5068f8
commit 5d9167133c
11 changed files with 179 additions and 110 deletions

View File

@ -1,7 +1,24 @@
2001-02-01 Ulrich Drepper <drepper@redhat.com>
* Makerules (build-shlib): Add $(extra-B-$(@F:lib%.so=%).so).
* configure.in: Test for -z initfirst linker option.
* config.make.in: Add have-z-initfirst.
* elf/dl-init.c (_dl_init): Split out actual initialization code in
new function call_init. If _dl_initfirst is non-NULL initialize first.
* elf/dl-load.c (_dl_map_from_fd): If DF_1_INITFIRST flag is set
remember object in _dl_initfirst.
* elf/soinit.c: Remove special support for calling
__pthread_initialize_minimal.
* conform/conformtest.pl: Add missing $prepend in type test.
2001-01-31 Ulrich Drepper <drepper@redhat.com> 2001-01-31 Ulrich Drepper <drepper@redhat.com>
* elf/elf.h (SHT_CHECKSUM): New definition.
* posix/fnmatch_loop.c: Remove incorrect reverse condition in * posix/fnmatch_loop.c: Remove incorrect reverse condition in
[. .] matching. Patch by Isamu Hasegawa <isamu@yamato.ibm.com>. [. .] matching. Patch by Isamu Hasegawa <isamu@yamato.ibm.com>.
* posix/tst-fnmatch.input: Add tests for [. .] in locales.
2001-01-31 Mark Kettenis <kettenis@gnu.org> 2001-01-31 Mark Kettenis <kettenis@gnu.org>

View File

@ -1,5 +1,4 @@
# Copyright (C) 1991,92,93,94,95,96,97,98,99,2000 # Copyright (C) 1991-1999, 2000,2001 Free Software Foundation, Inc.
# Free Software Foundation, Inc.
# This file is part of the GNU C Library. # This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or # The GNU C Library is free software; you can redistribute it and/or
@ -416,7 +415,7 @@ lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp)
define build-shlib define build-shlib
$(LINK.o) -shared -Wl,-O1 -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \ $(LINK.o) -shared -Wl,-O1 -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-B$(csu-objpfx) $(load-map-file) \ $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) $(load-map-file) \
-Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \ -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \
$(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \ $(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \
-L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \

View File

@ -39,6 +39,7 @@ elf = @elf@
have-protected = @libc_cv_asm_protected_directive@ have-protected = @libc_cv_asm_protected_directive@
have-z-nodelete = @libc_cv_z_nodelete@ have-z-nodelete = @libc_cv_z_nodelete@
have-z-nodlopen = @libc_cv_z_nodlopen@ have-z-nodlopen = @libc_cv_z_nodlopen@
have-z-initfirst = @libc_cv_z_initfirst@
have-initfini = @libc_cv_have_initfini@ have-initfini = @libc_cv_have_initfini@
need-nopic-initfini = @nopic_initfini@ need-nopic-initfini = @nopic_initfini@
with-cvs = @with_cvs@ with-cvs = @with_cvs@

109
configure vendored
View File

@ -2735,16 +2735,36 @@ fi
echo "$ac_t""$libc_cv_z_nodlopen" 1>&6 echo "$ac_t""$libc_cv_z_nodlopen" 1>&6
echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6
echo "configure:2741: 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
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then
libc_cv_z_initfirst=yes
else
libc_cv_z_initfirst=no
fi
rm -f conftest*
fi
echo "$ac_t""$libc_cv_z_initfirst" 1>&6
fi fi
if test $elf != yes; then if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:2743: checking for .init and .fini sections" >&5 echo "configure:2763: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2748 "configure" #line 2768 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
@ -2753,7 +2773,7 @@ asm (".section .init");
asm ("${libc_cv_dot_text}"); asm ("${libc_cv_dot_text}");
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2757: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
libc_cv_have_initfini=yes libc_cv_have_initfini=yes
else else
@ -2776,7 +2796,7 @@ fi
if test $elf = yes -a $gnu_ld = yes; then 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 $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
echo "configure:2780: checking whether cc puts quotes around section names" >&5 echo "configure:2800: checking whether cc puts quotes around section names" >&5
if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2813,19 +2833,19 @@ if test $elf = yes; then
else else
if test $ac_cv_prog_cc_works = yes; then if test $ac_cv_prog_cc_works = yes; then
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:2817: checking for _ prefix on C symbol names" >&5 echo "configure:2837: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2822 "configure" #line 2842 "configure"
#include "confdefs.h" #include "confdefs.h"
asm ("_glibc_foobar:"); asm ("_glibc_foobar:");
int main() { int main() {
glibc_foobar (); glibc_foobar ();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2829: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:2849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
libc_cv_asm_underscores=yes libc_cv_asm_underscores=yes
else else
@ -2840,17 +2860,17 @@ fi
echo "$ac_t""$libc_cv_asm_underscores" 1>&6 echo "$ac_t""$libc_cv_asm_underscores" 1>&6
else else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:2844: checking for _ prefix on C symbol names" >&5 echo "configure:2864: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2849 "configure" #line 2869 "configure"
#include "confdefs.h" #include "confdefs.h"
void underscore_test(void) { void underscore_test(void) {
return; } return; }
EOF EOF
if { (eval echo configure:2854: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2874: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _underscore_test conftest* >/dev/null; then if grep _underscore_test conftest* >/dev/null; then
rm -f conftest* rm -f conftest*
libc_cv_asm_underscores=yes libc_cv_asm_underscores=yes
@ -2882,7 +2902,7 @@ if test $elf = yes; then
fi fi
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:2886: checking for assembler .weak directive" >&5 echo "configure:2906: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2905,7 +2925,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:2909: checking for assembler .weakext directive" >&5 echo "configure:2929: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2945,14 +2965,14 @@ fi
case "${host_cpu}-${host_os}" in case "${host_cpu}-${host_os}" in
hppa*linux*) hppa*linux*)
echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6 echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6
echo "configure:2949: checking for assembler line separator" >&5 echo "configure:2969: checking for assembler line separator" >&5
if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.s <<EOF cat > conftest.s <<EOF
nop ; is_old_puffin nop ; is_old_puffin
EOF EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_line_sep='!' libc_cv_asm_line_sep='!'
else else
if test -z "$enable_hacker_mode"; then if test -z "$enable_hacker_mode"; then
@ -2974,7 +2994,7 @@ EOF
esac esac
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:2978: checking for ld --no-whole-archive" >&5 echo "configure:2998: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2985,7 +3005,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive -nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c 1>&5'; { (eval echo configure:2989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c 1>&5'; { (eval echo configure:3009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes libc_cv_ld_no_whole_archive=yes
else else
libc_cv_ld_no_whole_archive=no libc_cv_ld_no_whole_archive=no
@ -2999,7 +3019,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then
fi fi
echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
echo "configure:3003: checking for gcc -fexceptions" >&5 echo "configure:3023: checking for gcc -fexceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3010,7 +3030,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fexceptions -nostdlib -nostartfiles -fexceptions
-o conftest conftest.c 1>&5'; { (eval echo configure:3014: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c 1>&5'; { (eval echo configure:3034: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_exceptions=yes libc_cv_gcc_exceptions=yes
else else
libc_cv_gcc_exceptions=no libc_cv_gcc_exceptions=no
@ -3025,14 +3045,14 @@ fi
if test "$base_machine" = alpha ; then if test "$base_machine" = alpha ; then
echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
echo "configure:3029: checking for function ..ng prefix" >&5 echo "configure:3049: checking for function ..ng prefix" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<\EOF cat > conftest.c <<\EOF
foo () { } foo () { }
EOF EOF
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3036: \"$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:3056: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then then
libc_cv_gcc_alpha_ng_prefix=yes libc_cv_gcc_alpha_ng_prefix=yes
else else
@ -3059,19 +3079,19 @@ if test "$host_cpu" = powerpc ; then
# Check for a bug present in at least versions 2.8.x of GCC # Check for a bug present in at least versions 2.8.x of GCC
# and versions 1.0.x of EGCS. # and versions 1.0.x of EGCS.
echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6 echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
echo "configure:3063: checking whether clobbering cr0 causes problems" >&5 echo "configure:3083: checking whether clobbering cr0 causes problems" >&5
if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3068 "configure" #line 3088 "configure"
#include "confdefs.h" #include "confdefs.h"
int tester(int x) { asm ("" : : : "cc"); return x & 123; } int tester(int x) { asm ("" : : : "cc"); return x & 123; }
int main() { int main() {
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:3075: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:3095: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
libc_cv_c_asmcr0_bug='no' libc_cv_c_asmcr0_bug='no'
else else
@ -3093,12 +3113,12 @@ fi
fi fi
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
echo "configure:3097: checking for DWARF2 unwind info support" >&5 echo "configure:3117: checking for DWARF2 unwind info support" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3102 "configure" #line 3122 "configure"
static char __EH_FRAME_BEGIN__; static char __EH_FRAME_BEGIN__;
_start () _start ()
{ {
@ -3125,7 +3145,7 @@ __bzero () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
-nostdlib -nostartfiles -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3149: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=static libc_cv_gcc_dwarf2_unwind_info=static
else else
libc_cv_gcc_dwarf2_unwind_info=no libc_cv_gcc_dwarf2_unwind_info=no
@ -3133,7 +3153,7 @@ fi
if test $libc_cv_gcc_dwarf2_unwind_info = no; then if test $libc_cv_gcc_dwarf2_unwind_info = no; then
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
-nostdlib -nostartfiles -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3157: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=yes libc_cv_gcc_dwarf2_unwind_info=yes
else else
libc_cv_gcc_dwarf2_unwind_info=no libc_cv_gcc_dwarf2_unwind_info=no
@ -3163,12 +3183,12 @@ EOF
esac esac
echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
echo "configure:3167: checking for __builtin_expect" >&5 echo "configure:3187: checking for __builtin_expect" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3172 "configure" #line 3192 "configure"
int foo (int a) int foo (int a)
{ {
a = __builtin_expect (a, 10); a = __builtin_expect (a, 10);
@ -3176,7 +3196,7 @@ int foo (int a)
} }
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3200: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_builtin_expect=yes libc_cv_gcc_builtin_expect=yes
else else
libc_cv_gcc_builtin_expect=no libc_cv_gcc_builtin_expect=no
@ -3193,12 +3213,12 @@ EOF
fi fi
echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6 echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6
echo "configure:3197: checking for local label subtraction" >&5 echo "configure:3217: checking for local label subtraction" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3202 "configure" #line 3222 "configure"
int foo (int a) int foo (int a)
{ {
static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 }; static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
@ -3211,7 +3231,7 @@ int foo (int a)
} }
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3215: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_subtract_local_labels=yes libc_cv_gcc_subtract_local_labels=yes
else else
libc_cv_gcc_subtract_local_labels=no libc_cv_gcc_subtract_local_labels=no
@ -3228,7 +3248,7 @@ EOF
fi fi
echo $ac_n "checking for libgd""... $ac_c" 1>&6 echo $ac_n "checking for libgd""... $ac_c" 1>&6
echo "configure:3232: checking for libgd" >&5 echo "configure:3252: checking for libgd" >&5
old_CFLAGS="$CFLAGS" old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $libgd_include" CFLAGS="$CFLAGS $libgd_include"
old_LDFLAGS="$LDFLAGS" old_LDFLAGS="$LDFLAGS"
@ -3236,14 +3256,14 @@ LDFLAGS="$LDFLAGS $libgd_ldflags"
old_LIBS="$LIBS" old_LIBS="$LIBS"
LIBS="$LIBS -lgd -lpng -lz -lm" LIBS="$LIBS -lgd -lpng -lz -lm"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3240 "configure" #line 3260 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <gd.h> #include <gd.h>
int main() { int main() {
gdImagePng (0, 0) gdImagePng (0, 0)
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:3247: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:3267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
LIBGD=yes LIBGD=yes
else else
@ -3260,7 +3280,7 @@ echo "$ac_t""$LIBGD" 1>&6
echo $ac_n "checking size of long double""... $ac_c" 1>&6 echo $ac_n "checking size of long double""... $ac_c" 1>&6
echo "configure:3264: checking size of long double" >&5 echo "configure:3284: checking size of long double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3268,7 +3288,7 @@ else
ac_cv_sizeof_long_double=0 ac_cv_sizeof_long_double=0
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3272 "configure" #line 3292 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
main() main()
@ -3279,7 +3299,7 @@ main()
exit(0); exit(0);
} }
EOF EOF
if { (eval echo configure:3283: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null if { (eval echo configure:3303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then then
ac_cv_sizeof_long_double=`cat conftestval` ac_cv_sizeof_long_double=`cat conftestval`
else else
@ -3347,7 +3367,7 @@ if test "$uname" = "sysdeps/generic"; then
fi fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:3351: checking OS release for uname" >&5 echo "configure:3371: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3369,7 +3389,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release" uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:3373: checking OS version for uname" >&5 echo "configure:3393: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3391,7 +3411,7 @@ else
fi fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:3395: checking stdio selection" >&5 echo "configure:3415: checking stdio selection" >&5
case $stdio in case $stdio in
libio) cat >> confdefs.h <<\EOF libio) cat >> confdefs.h <<\EOF
@ -3405,7 +3425,7 @@ echo "$ac_t""$stdio" 1>&6
# Test for old glibc 2.0.x headers so that they can be removed properly # Test for old glibc 2.0.x headers so that they can be removed properly
# Search only in includedir. # Search only in includedir.
echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
echo "configure:3409: checking for old glibc 2.0.x headers" >&5 echo "configure:3429: checking for old glibc 2.0.x headers" >&5
if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
then then
old_glibc_headers=yes old_glibc_headers=yes
@ -3460,7 +3480,7 @@ if test $shared = default; then
fi fi
echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
echo "configure:3464: checking whether -fPIC is default" >&5 echo "configure:3484: checking whether -fPIC is default" >&5
if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3685,6 +3705,7 @@ s%@VERSIONING@%$VERSIONING%g
s%@libc_cv_asm_protected_directive@%$libc_cv_asm_protected_directive%g s%@libc_cv_asm_protected_directive@%$libc_cv_asm_protected_directive%g
s%@libc_cv_z_nodelete@%$libc_cv_z_nodelete%g s%@libc_cv_z_nodelete@%$libc_cv_z_nodelete%g
s%@libc_cv_z_nodlopen@%$libc_cv_z_nodlopen%g s%@libc_cv_z_nodlopen@%$libc_cv_z_nodlopen%g
s%@libc_cv_z_initfirst@%$libc_cv_z_initfirst%g
s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g
s%@no_whole_archive@%$no_whole_archive%g s%@no_whole_archive@%$no_whole_archive%g
s%@exceptions@%$exceptions%g s%@exceptions@%$exceptions%g

View File

@ -973,6 +973,20 @@ EOF
fi fi
rm -f conftest*]) rm -f conftest*])
AC_SUBST(libc_cv_z_nodlopen) AC_SUBST(libc_cv_z_nodlopen)
AC_CACHE_CHECK(for -z initfirst option,
libc_cv_z_initfirst, [dnl
cat > conftest.c <<EOF
int _start (void) { return 42; }
EOF
if AC_TRY_COMMAND([${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&AC_FD_CC])
then
libc_cv_z_initfirst=yes
else
libc_cv_z_initfirst=no
fi
rm -f conftest*])
AC_SUBST(libc_cv_z_initfirst)
fi fi
if test $elf != yes; then if test $elf != yes; then

View File

@ -670,6 +670,7 @@ while ($#headers >= 0) {
# Generate a program to test for the availability of this type. # Generate a program to test for the availability of this type.
open (TESTFILE, ">$fnamebase.c"); open (TESTFILE, ">$fnamebase.c");
print TESTFILE "$prepend";
print TESTFILE "#include <$h>\n"; print TESTFILE "#include <$h>\n";
if ($maybe_opaque == 1) { if ($maybe_opaque == 1) {
print TESTFILE "$type *a;\n"; print TESTFILE "$type *a;\n";

View File

@ -1,5 +1,5 @@
/* Return the next shared object initializer function not yet run. /* Return the next shared object initializer function not yet run.
Copyright (C) 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1995,1996,1998,1999,2000,2001 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -27,6 +27,63 @@ typedef void (*init_t) (int, char **, char **);
/* Flag, nonzero during startup phase. */ /* Flag, nonzero during startup phase. */
extern int _dl_starting_up; extern int _dl_starting_up;
/* The object to be initialized first. */
extern struct link_map *_dl_initfirst;
static void
call_init (struct link_map *l, int argc, char **argv, char **env)
{
if (l->l_init_called)
/* This object is all done. */
return;
/* Avoid handling this constructor again in case we have a circular
dependency. */
l->l_init_called = 1;
/* Check for object which constructors we do not run here. */
if (l->l_name[0] == '\0' && l->l_type == lt_executable)
return;
/* Are there any constructors? */
if (l->l_info[DT_INIT] == NULL && l->l_info[DT_INIT_ARRAY] == NULL)
return;
/* Print a debug message if wanted. */
if (__builtin_expect (_dl_debug_impcalls, 0))
_dl_debug_message (1, "\ncalling init: ",
l->l_name[0] ? l->l_name : _dl_argv[0], "\n\n", NULL);
/* Now run the local constructors. There are two forms of them:
- the one named by DT_INIT
- the others in the DT_INIT_ARRAY.
*/
if (l->l_info[DT_INIT] != NULL)
{
init_t init = (init_t) DL_DT_INIT_ADDRESS
(l, l->l_addr + l->l_info[DT_INIT]->d_un.d_ptr);
/* Call the function. */
init (argc, argv, env);
}
/* Next see whether there is an array with initialization functions. */
if (l->l_info[DT_INIT_ARRAY] != NULL)
{
unsigned int j;
unsigned int jm;
ElfW(Addr) *addrs;
jm = l->l_info[DT_INIT_ARRAYSZ]->d_un.d_val / sizeof (ElfW(Addr));
addrs = (ElfW(Addr) *) (l->l_info[DT_INIT_ARRAY]->d_un.d_ptr
+ l->l_addr);
for (j = 0; j < jm; ++j)
((init_t) addrs[j]) (argc, argv, env);
}
}
void void
internal_function internal_function
@ -36,6 +93,12 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
struct r_debug *r; struct r_debug *r;
unsigned int i; unsigned int i;
if (_dl_initfirst != NULL)
{
call_init (_dl_initfirst, argc, argv, env);
_dl_initfirst = NULL;
}
/* Don't do anything if there is no preinit array. */ /* Don't do anything if there is no preinit array. */
if (preinit_array != NULL if (preinit_array != NULL
&& (i = preinit_array->d_un.d_val / sizeof (ElfW(Addr))) > 0) && (i = preinit_array->d_un.d_val / sizeof (ElfW(Addr))) > 0)
@ -73,60 +136,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
i = main_map->l_searchlist.r_nlist; i = main_map->l_searchlist.r_nlist;
while (i-- > 0) while (i-- > 0)
{ call_init (main_map->l_initfini[i], argc, argv, env);
struct link_map *l = main_map->l_initfini[i];
init_t init;
if (l->l_init_called)
/* This object is all done. */
continue;
/* Avoid handling this constructor again in case we have a circular
dependency. */
l->l_init_called = 1;
/* Check for object which constructors we do not run here. */
if (l->l_name[0] == '\0' && l->l_type == lt_executable)
continue;
/* Are there any constructors? */
if (l->l_info[DT_INIT] == NULL && l->l_info[DT_INIT_ARRAY] == NULL)
continue;
/* Print a debug message if wanted. */
if (__builtin_expect (_dl_debug_impcalls, 0))
_dl_debug_message (1, "\ncalling init: ",
l->l_name[0] ? l->l_name : _dl_argv[0],
"\n\n", NULL);
/* Now run the local constructors. There are two forms of them:
- the one named by DT_INIT
- the others in the DT_INIT_ARRAY.
*/
if (l->l_info[DT_INIT] != NULL)
{
init = (init_t) DL_DT_INIT_ADDRESS
(l, l->l_addr + l->l_info[DT_INIT]->d_un.d_ptr);
/* Call the function. */
init (argc, argv, env);
}
/* Next see whether there is an array with initialization functions. */
if (l->l_info[DT_INIT_ARRAY] != NULL)
{
unsigned int j;
unsigned int jm;
ElfW(Addr) *addrs;
jm = l->l_info[DT_INIT_ARRAYSZ]->d_un.d_val / sizeof (ElfW(Addr));
addrs = (ElfW(Addr) *) (l->l_info[DT_INIT_ARRAY]->d_un.d_ptr
+ l->l_addr);
for (j = 0; j < jm; ++j)
((init_t) addrs[j]) (argc, argv, env);
}
}
/* Notify the debugger all new objects are now ready to go. */ /* Notify the debugger all new objects are now ready to go. */
r->r_state = RT_CONSISTENT; r->r_state = RT_CONSISTENT;

View File

@ -117,6 +117,9 @@ int _dl_clktck;
extern const char *_dl_platform; extern const char *_dl_platform;
extern size_t _dl_platformlen; extern size_t _dl_platformlen;
/* The object to be initialized first. */
struct link_map *_dl_initfirst;
/* This is the decomposed LD_LIBRARY_PATH search path. */ /* This is the decomposed LD_LIBRARY_PATH search path. */
static struct r_search_path_struct env_path_list; static struct r_search_path_struct env_path_list;
@ -1150,6 +1153,10 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
l->l_scope[0] = &l->l_symbolic_searchlist; l->l_scope[0] = &l->l_symbolic_searchlist;
} }
/* Remember whether this object must be initialized first. */
if (l->l_flags_1 & DF_1_INITFIRST)
_dl_initfirst = l;
/* Finally the file information. */ /* Finally the file information. */
l->l_dev = st.st_dev; l->l_dev = st.st_dev;
l->l_ino = st.st_ino; l->l_ino = st.st_ino;

View File

@ -295,6 +295,7 @@ typedef struct
#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */ #define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
#define SHT_NUM 19 /* Number of defined types. */ #define SHT_NUM 19 /* Number of defined types. */
#define SHT_LOOS 0x60000000 /* Start OS-specific */ #define SHT_LOOS 0x60000000 /* Start OS-specific */
#define SHT_CHECKSUM 0x6ffffff8 /* Checksum for DSO content. */
#define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */ #define SHT_LOSUNW 0x6ffffffa /* Sun-specific low bound. */
#define SHT_SUNW_move 0x6ffffffa #define SHT_SUNW_move 0x6ffffffa
#define SHT_SUNW_COMDAT 0x6ffffffb #define SHT_SUNW_COMDAT 0x6ffffffb

View File

@ -36,9 +36,6 @@ extern void __deregister_frame (const void *);
# endif # endif
#endif #endif
/* We have to initialize the thread library at least if bit. */
extern void __pthread_initialize_minimal (void) __attribute__ ((weak));
/* This function will be called from _init in init-first.c. */ /* This function will be called from _init in init-first.c. */
void void
__libc_global_ctors (void) __libc_global_ctors (void)
@ -46,11 +43,6 @@ __libc_global_ctors (void)
/* Call constructor functions. */ /* Call constructor functions. */
run_hooks (__CTOR_LIST__); run_hooks (__CTOR_LIST__);
/* Initialize the thread library at least a bit since the libgcc functions
are using thread functions if these are available. */
if (__pthread_initialize_minimal)
__pthread_initialize_minimal ();
#ifdef HAVE_DWARF2_UNWIND_INFO #ifdef HAVE_DWARF2_UNWIND_INFO
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC # ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
{ {

View File

@ -460,6 +460,9 @@ de_DE.ISO-8859-1 "
de_DE.ISO-8859-1 "b" "[[=<3D>=]b]" 0 de_DE.ISO-8859-1 "b" "[[=<3D>=]b]" 0
de_DE.ISO-8859-1 "c" "[[=<3D>=]b]" NOMATCH de_DE.ISO-8859-1 "c" "[[=<3D>=]b]" NOMATCH
de_DE.ISO-8859-1 "aa" "[[.a.]]a" 0
de_DE.ISO-8859-1 "ba" "[[.a.]]a" NOMATCH
# And with a multibyte character set. # And with a multibyte character set.
de_DE.UTF-8 "a" "[a-z]" 0 de_DE.UTF-8 "a" "[a-z]" 0
@ -549,6 +552,9 @@ de_DE.UTF-8 "ä" "[[=ä=]b]" 0
de_DE.UTF-8 "b" "[[=ä=]b]" 0 de_DE.UTF-8 "b" "[[=ä=]b]" 0
de_DE.UTF-8 "c" "[[=ä=]b]" NOMATCH de_DE.UTF-8 "c" "[[=ä=]b]" NOMATCH
de_DE.UTF-8 "aa" "[[.a.]]a" 0
de_DE.UTF-8 "ba" "[[.a.]]a" NOMATCH
# Test of GNU extensions. # Test of GNU extensions.
C "x" "x" 0 PATHNAME|LEADING_DIR C "x" "x" 0 PATHNAME|LEADING_DIR