aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2020-05-18 14:56:26 +0200
committerFlorian Weimer <fweimer@redhat.com>2020-05-18 15:39:34 +0200
commitce12fc711387375d0248ab3ff9084fb958c43bc6 (patch)
tree209238fe57d7638b79a7c112fe8c2192256e0324
parent7b5bfe77836442b9aeb75cc520f0d1eb7f82be67 (diff)
downloadglibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.zip
glibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.tar.gz
glibc-ce12fc711387375d0248ab3ff9084fb958c43bc6.tar.bz2
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--Makerules6
-rw-r--r--config.h.in3
-rwxr-xr-xconfigure53
-rw-r--r--configure.ac30
-rw-r--r--csu/init-first.c4
-rw-r--r--elf/Makefile2
-rw-r--r--elf/sofini.c12
-rw-r--r--elf/soinit.c43
-rw-r--r--include/libc-internal.h3
-rw-r--r--sysdeps/mach/hurd/i386/init-first.c5
10 files changed, 3 insertions, 158 deletions
diff --git a/Makerules b/Makerules
index 1e9c18f..341db86 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 dea43df..cd7d4df 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 8df47d6..b8ef8c7 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 5f22967..ff00591 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 d214af7..47aaacd 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 77da61a..6fe1df9 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 13e74b7..1c526fd 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 538eb68..0000000
--- 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 4c74f6b..729db79 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 a7dd489..5e66602 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
}