Browse Source

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.)
nsz/pacbti-v4
Florian Weimer 6 years ago
parent
commit
ce12fc7113
  1. 6
      Makerules
  2. 3
      config.h.in
  3. 53
      configure
  4. 30
      configure.ac
  5. 4
      csu/init-first.c
  6. 2
      elf/Makefile
  7. 12
      elf/sofini.c
  8. 43
      elf/soinit.c
  9. 3
      include/libc-internal.h
  10. 5
      sysdeps/mach/hurd/i386/init-first.c

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

3
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

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

30
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

4
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

2
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

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

43
elf/soinit.c

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

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

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

Loading…
Cancel
Save