diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-05-18 14:56:26 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-05-18 15:39:34 +0200 |
commit | ce12fc711387375d0248ab3ff9084fb958c43bc6 (patch) | |
tree | 209238fe57d7638b79a7c112fe8c2192256e0324 | |
parent | 7b5bfe77836442b9aeb75cc520f0d1eb7f82be67 (diff) | |
download | glibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.tar.gz glibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.tar.xz glibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.zip |
Remove NO_CTORS_DTORS_SECTIONS macro
This was originally added to support binutils older than version 2.22: <https://sourceware.org/ml/libc-alpha/2010-12/msg00051.html> Since 2.22 is older than the minimum required binutils version for building glibc, we no longer need this. (The changes do not impact the statically linked startup code.)
-rw-r--r-- | Makerules | 6 | ||||
-rw-r--r-- | config.h.in | 3 | ||||
-rwxr-xr-x | configure | 53 | ||||
-rw-r--r-- | configure.ac | 30 | ||||
-rw-r--r-- | csu/init-first.c | 4 | ||||
-rw-r--r-- | elf/Makefile | 2 | ||||
-rw-r--r-- | elf/sofini.c | 12 | ||||
-rw-r--r-- | elf/soinit.c | 43 | ||||
-rw-r--r-- | include/libc-internal.h | 3 | ||||
-rw-r--r-- | sysdeps/mach/hurd/i386/init-first.c | 5 |
10 files changed, 3 insertions, 158 deletions
diff --git a/Makerules b/Makerules index 1e9c18f0d8..341db86c7e 100644 --- a/Makerules +++ b/Makerules @@ -690,8 +690,7 @@ $(common-objpfx)linkobj/libc.so: link-libc-deps = # empty # Use our own special initializer and finalizer files for the libc.so # libraries. -$(common-objpfx)libc.so: $(elf-objpfx)soinit.os \ - $(common-objpfx)libc_pic.os$(libc_pic_clean) \ +$(common-objpfx)libc.so: $(common-objpfx)libc_pic.os$(libc_pic_clean) \ $(elf-objpfx)sofini.os \ $(elf-objpfx)interp.os \ $(elf-objpfx)ld.so \ @@ -699,8 +698,7 @@ $(common-objpfx)libc.so: $(elf-objpfx)soinit.os \ $(build-shlib) $(call after-link,$@) -$(common-objpfx)linkobj/libc.so: $(elf-objpfx)soinit.os \ - $(common-objpfx)linkobj/libc_pic.a \ +$(common-objpfx)linkobj/libc.so: $(common-objpfx)linkobj/libc_pic.a \ $(elf-objpfx)sofini.os \ $(elf-objpfx)interp.os \ $(elf-objpfx)ld.so \ diff --git a/config.h.in b/config.h.in index dea43df438..cd7d4df3ed 100644 --- a/config.h.in +++ b/config.h.in @@ -157,9 +157,6 @@ /* Define if multi-arch DSOs should be generated. */ #undef USE_MULTIARCH -/* Define if `.ctors' and `.dtors' sections shouldn't be used. */ -#undef NO_CTORS_DTORS_SECTIONS - /* Define if obsolete RPC code should be made available for user-level code to link against. */ #undef LINK_OBSOLETE_RPC diff --git a/configure b/configure index 8df47d61f8..b8ef8c7a51 100755 --- a/configure +++ b/configure @@ -5753,59 +5753,6 @@ if test $libc_cv_have_sdata_section = yes; then fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use .ctors/.dtors header and trailer" >&5 -$as_echo_n "checking whether to use .ctors/.dtors header and trailer... " >&6; } -if ${libc_cv_ctors_header+:} false; then : - $as_echo_n "(cached) " >&6 -else - libc_cv_ctors_header=yes - cat > conftest.c <<EOF -int _start (void) { return 0; } -int __start (void) { return 0; } - -__attribute__ ((constructor)) void ctor (void) { asm (""); } -__attribute__ ((destructor)) void dtor (void) { asm (""); } - -EOF -if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS $no_ssp -o conftest - conftest.c -static -nostartfiles -nostdlib - 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : - if $READELF -WS conftest$ac_exeext | $AWK ' - { gsub(/\[ */, "[") } - $2 == ".ctors" || $2 == ".dtors" { - size = strtonum("0x" $6) - align = strtonum("0x" $NF) - seen[$2] = 1 - stub[$2] = size == align * 2 - } - END { - ctors_ok = !seen[".ctors"] || stub[".ctors"] - dtors_ok = !seen[".dtors"] || stub[".dtors"] - exit ((ctors_ok && dtors_ok) ? 0 : 1) - } - '; then : - libc_cv_ctors_header=no -fi - -else - as_fn_error $? "missing __attribute__ ((constructor)) support??" "$LINENO" 5 - -fi -rm -f conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ctors_header" >&5 -$as_echo "$libc_cv_ctors_header" >&6; } -if test $libc_cv_ctors_header = no; then - $as_echo "#define NO_CTORS_DTORS_SECTIONS 1" >>confdefs.h - -fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libunwind-support in compiler" >&5 $as_echo_n "checking for libunwind-support in compiler... " >&6; } if ${libc_cv_cc_with_libunwind+:} false; then : diff --git a/configure.ac b/configure.ac index 5f229679a9..ff00591fd4 100644 --- a/configure.ac +++ b/configure.ac @@ -1251,36 +1251,6 @@ if test $libc_cv_have_sdata_section = yes; then AC_DEFINE(HAVE_SDATA_SECTION) fi -AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer, - libc_cv_ctors_header, [dnl - libc_cv_ctors_header=yes - LIBC_TRY_LINK_STATIC([ -__attribute__ ((constructor)) void ctor (void) { asm (""); } -__attribute__ ((destructor)) void dtor (void) { asm (""); } -], - [dnl - AS_IF([$READELF -WS conftest$ac_exeext | $AWK ' - { gsub(/\@<:@ */, "@<:@") } - $2 == ".ctors" || $2 == ".dtors" { - size = strtonum("0x" $6) - align = strtonum("0x" $NF) - seen@<:@$2@:>@ = 1 - stub@<:@$2@:>@ = size == align * 2 - } - END { - ctors_ok = !seen@<:@".ctors"@:>@ || stub@<:@".ctors"@:>@ - dtors_ok = !seen@<:@".dtors"@:>@ || stub@<:@".dtors"@:>@ - exit ((ctors_ok && dtors_ok) ? 0 : 1) - } - '], [libc_cv_ctors_header=no]) - ], [dnl - AC_MSG_ERROR([missing __attribute__ ((constructor)) support??]) - ]) -]) -if test $libc_cv_ctors_header = no; then - AC_DEFINE(NO_CTORS_DTORS_SECTIONS) -fi - AC_CACHE_CHECK(for libunwind-support in compiler, libc_cv_cc_with_libunwind, [ cat > conftest.c <<EOF diff --git a/csu/init-first.c b/csu/init-first.c index d214af7116..47aaacdbd0 100644 --- a/csu/init-first.c +++ b/csu/init-first.c @@ -73,10 +73,6 @@ _init_first (int argc, char **argv, char **envp) #endif __init_misc (argc, argv, envp); - -#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -#endif } /* This function is defined here so that if this file ever gets into diff --git a/elf/Makefile b/elf/Makefile index 77da61ae64..6fe1df90bb 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -98,7 +98,7 @@ ld-map = $(common-objpfx)ld.map endif ifeq (yes,$(build-shared)) -extra-objs = $(all-rtld-routines:%=%.os) soinit.os sofini.os interp.os +extra-objs = $(all-rtld-routines:%=%.os) sofini.os interp.os generated += librtld.os dl-allobjs.os ld.so ldd install-others = $(inst_rtlddir)/$(rtld-installed-name) install-bin-script = ldd diff --git a/elf/sofini.c b/elf/sofini.c index 13e74b7903..1c526fd603 100644 --- a/elf/sofini.c +++ b/elf/sofini.c @@ -1,15 +1,3 @@ -/* Finalizer module for ELF shared C library. This provides terminating - null pointer words in the `.ctors' and `.dtors' sections. */ - -#ifndef NO_CTORS_DTORS_SECTIONS -static void (*const __CTOR_END__[1]) (void) - __attribute__ ((used, section (".ctors"))) - = { 0 }; -static void (*const __DTOR_END__[1]) (void) - __attribute__ ((used, section (".dtors"))) - = { 0 }; -#endif - /* Terminate the frame unwind info section with a 4byte 0 as a sentinel; this would be the 'length' field in a real FDE. */ diff --git a/elf/soinit.c b/elf/soinit.c deleted file mode 100644 index 538eb68186..0000000000 --- a/elf/soinit.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Initializer module for building the ELF shared C library. This file and - sofini.c do the work normally done by crtbeginS.o and crtendS.o, to wrap - the `.ctors' and `.dtors' sections so the lists are terminated, and - calling those lists of functions. */ - -#ifndef NO_CTORS_DTORS_SECTIONS -# include <stdlib.h> - -static void (*const __CTOR_LIST__[1]) (void) - __attribute__ ((used, section (".ctors"))) - = { (void (*) (void)) -1 }; -static void (*const __DTOR_LIST__[1]) (void) - __attribute__ ((used, section (".dtors"))) - = { (void (*) (void)) -1 }; - -static inline void -run_hooks (void (*const list[]) (void)) -{ - while (*++list) - (**list) (); -} - -/* This function will be called from _init_first in init-first.c. */ -void -__libc_global_ctors (void) -{ - /* Call constructor functions. */ - run_hooks (__CTOR_LIST__); -} - - -/* This function becomes the DT_FINI termination function - for the C library. */ -void -__libc_fini (void) -{ - /* Call destructor functions. */ - run_hooks (__DTOR_LIST__); -} - -void (*_fini_ptr) (void) __attribute__ ((section (".fini_array"))) - = &__libc_fini; -#endif diff --git a/include/libc-internal.h b/include/libc-internal.h index 4c74f6ba60..729db7918e 100644 --- a/include/libc-internal.h +++ b/include/libc-internal.h @@ -24,9 +24,6 @@ /* Initialize the `__libc_enable_secure' flag. */ extern void __libc_init_secure (void); -/* This function will be called from _init_first in init-first.c. */ -extern void __libc_global_ctors (void); - /* Discover the tick frequency of the machine if something goes wrong, we return 0, an impossible hertz. */ extern int __profile_frequency (void); diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c index a7dd4895d9..5e66602d4b 100644 --- a/sysdeps/mach/hurd/i386/init-first.c +++ b/sysdeps/mach/hurd/i386/init-first.c @@ -33,7 +33,6 @@ extern void __mach_init (void); extern void __init_misc (int, char **, char **); -extern void __libc_global_ctors (void); unsigned long int __hurd_threadvar_stack_offset; unsigned long int __hurd_threadvar_stack_mask; @@ -83,10 +82,6 @@ posixland_init (int argc, char **argv, char **envp) _dl_non_dynamic_init (); #endif __init_misc (argc, argv, envp); - -#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS - __libc_global_ctors (); -#endif } |