]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Remove NO_CTORS_DTORS_SECTIONS macro
authorFlorian Weimer <fweimer@redhat.com>
Mon, 18 May 2020 12:56:26 +0000 (14:56 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Mon, 18 May 2020 13:39:34 +0000 (15:39 +0200)
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.)

Makerules
config.h.in
configure
configure.ac
csu/init-first.c
elf/Makefile
elf/sofini.c
elf/soinit.c [deleted file]
include/libc-internal.h
sysdeps/mach/hurd/i386/init-first.c

index 1e9c18f0d866731910d29327b975e359dbb3ea33..341db86c7ef6fd37c4d52833e2e137348690905e 100644 (file)
--- 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 \
index dea43df438f68df3202cbe240e4645ba9c64afde..cd7d4df3ed252a94da6d60c7f8dd66306fe3c6d4 100644 (file)
 /* 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
index 8df47d61f854f0dcc2caffac8ad2e91d745c7d6b..b8ef8c7a517336d084c856d3c416bfc6c64680dd 100755 (executable)
--- 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 :
index 5f229679a905559caa42e48b04299edaa3a2a776..ff00591fd42eda6fce0c247fba3c96a4c1dd09ba 100644 (file)
@@ -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
index d214af7116a23b4366f2965cba00a25321a536e5..47aaacdbd09a5f15fd3c9253d98afc13dd7c7b29 100644 (file)
@@ -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
index 77da61ae64dd96141fbbfcdbcc162d60e8daef0b..6fe1df90bb763f5287cee08c6a9aec5857752c2f 100644 (file)
@@ -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
index 13e74b7903bf5ba6e13ef862c3906c1eab53f4dd..1c526fd60313bc85ffbb57286bb346059d508f73 100644 (file)
@@ -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 (file)
index 538eb68..0000000
+++ /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
index 4c74f6ba60a7dfcab49b5d54f21862913102ca1a..729db7918e8c943f6623ee40503c613e49b6ebb4 100644 (file)
@@ -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);
index a7dd4895d9728110dbee5b681886dfe8b2b5fa54..5e66602d4b54e64785b35768955132e51b77e2f8 100644 (file)
@@ -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
 }