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.)
This commit is contained in:
Florian Weimer 2020-05-18 14:56:26 +02:00
parent 7b5bfe7783
commit ce12fc7113
10 changed files with 3 additions and 158 deletions

View File

@ -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 \

View File

@ -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

53
configure vendored
View File

@ -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 :

View 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

View 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

View 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

View 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. */

View File

@ -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

View 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);

View 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
}