* [PATCH] Remove support for NO_CTORS_DTORS_SECTIONS
@ 2019-10-08 15:15 Florian Weimer
2019-10-08 16:44 ` Joseph Myers
0 siblings, 1 reply; 3+ messages in thread
From: Florian Weimer @ 2019-10-08 15:15 UTC (permalink / raw)
To: libc-alpha
As far as I can tell, no architecture currently needs this. The
build-many-glibcs.py logs I have show that the configure check for
.ctors/.dtors sections always fails.
This is part of my efforts to rework the early initialization code in
preparation for rseq support.
Tested on x86_64-linux-gnu, i686-linux-gnu, s390x-linux-gnu,
powerpc64le-linux-gnu, aarch64-linux-gnu. Built with
build-many-glibcs.py (compilers followed by glibcs).
2019-10-08 Florian Weimer <fweimer@redhat.com>
Remove support for NO_CTORS_DTORS_SECTIONS.
* Makerules (libc.so): Do not link with soinit.os.
(linkobj/libc.so): Likewise.
* config.h.in (NO_CTORS_DTORS_SECTIONS): Remove definition.
* configure.ac: Remove check for NO_CTORS_DTORS_SECTIONS.
* configure: Regenerate.
* csu/init-first.c (_init): Remove call to __libc_global_ctors.
* elf/Makefile (extra-objs): Remove soinit.os.
* elf/sofini.c (__CTOR_END__, __DTOR_END__): Remove definitions.
* elf/sonit.c: Remove file.
* include/libc-internal.h (__libc_global_ctors): Remove
declaration.
* sysdeps/mach/hurd/i386/init-first.c (__libc_global_ctors):
Remove declaration.
(posixland_init): Remove call to __libc_global_ctors.
diff --git a/Makerules b/Makerules
index f5134586fa..102504004e 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 824dfe8d8c..e483e47274 100644
--- a/config.h.in
+++ b/config.h.in
@@ -160,9 +160,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 2f44b66656..9112fd3285 100755
--- a/configure
+++ b/configure
@@ -5731,59 +5731,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 e69c88c543..c3f8b16909 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1243,36 +1243,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 e0f489ee6d..c7d18fa4c1 100644
--- a/csu/init-first.c
+++ b/csu/init-first.c
@@ -82,10 +82,6 @@ _init (int argc, char **argv, char **envp)
/* Initialize ctype data. */
__ctype_init ();
-
-#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 dea51ca182..377f594e19 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -91,7 +91,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 fe9935732b..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 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 05b6b66830..6b48265752 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 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 f1f1c40389..fa939f7b73 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;
@@ -86,10 +85,6 @@ posixland_init (int argc, char **argv, char **envp)
/* Initialize ctype data. */
__ctype_init ();
-
-#if defined SHARED && !defined NO_CTORS_DTORS_SECTIONS
- __libc_global_ctors ();
-#endif
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Remove support for NO_CTORS_DTORS_SECTIONS
2019-10-08 15:15 [PATCH] Remove support for NO_CTORS_DTORS_SECTIONS Florian Weimer
@ 2019-10-08 16:44 ` Joseph Myers
2019-10-08 16:50 ` Florian Weimer
0 siblings, 1 reply; 3+ messages in thread
From: Joseph Myers @ 2019-10-08 16:44 UTC (permalink / raw)
To: Florian Weimer; +Cc: libc-alpha
On Tue, 8 Oct 2019, Florian Weimer wrote:
> As far as I can tell, no architecture currently needs this. The
> build-many-glibcs.py logs I have show that the configure check for
> .ctors/.dtors sections always fails.
I don't think this was meant to be architecture-specific. It was added in
<https://sourceware.org/ml/libc-alpha/2010-12/msg00051.html>; the relevant
linker feature appears to have been added in binutils 2.22 (which is older
than the oldest supported binutils version for building glibc).
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Remove support for NO_CTORS_DTORS_SECTIONS
2019-10-08 16:44 ` Joseph Myers
@ 2019-10-08 16:50 ` Florian Weimer
0 siblings, 0 replies; 3+ messages in thread
From: Florian Weimer @ 2019-10-08 16:50 UTC (permalink / raw)
To: Joseph Myers; +Cc: libc-alpha
* Joseph Myers:
> On Tue, 8 Oct 2019, Florian Weimer wrote:
>
>> As far as I can tell, no architecture currently needs this. The
>> build-many-glibcs.py logs I have show that the configure check for
>> .ctors/.dtors sections always fails.
>
> I don't think this was meant to be architecture-specific. It was added in
> <https://sourceware.org/ml/libc-alpha/2010-12/msg00051.html>; the relevant
> linker feature appears to have been added in binutils 2.22 (which is older
> than the oldest supported binutils version for building glibc).
Thanks. I have changed the commit message to this:
Remove support for NO_CTORS_DTORS_SECTIONS
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.)
Tested on x86_64-linux-gnu, i686-linux-gnu, s390x-linux-gnu,
powerpc64le-linux-gnu, aarch64-linux-gnu. Built with
build-many-glibcs.py (compilers followed by glibcs).
Okay for master?
Florian
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-10-08 16:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-08 15:15 [PATCH] Remove support for NO_CTORS_DTORS_SECTIONS Florian Weimer
2019-10-08 16:44 ` Joseph Myers
2019-10-08 16:50 ` Florian Weimer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).