diff options
author | Florian Weimer <fweimer@redhat.com> | 2020-02-18 14:42:41 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2020-02-18 15:12:25 +0100 |
commit | f4349837d93b4dfe9ba09791e280ee2d6c99919f (patch) | |
tree | 2d9b57dc8a2b38bc369e0e0f89232046d8be38ca /nptl | |
parent | 6e05978f0c30e52420e086cc3156655471e6fb0a (diff) | |
download | glibc-f4349837d93b4dfe9ba09791e280ee2d6c99919f.zip glibc-f4349837d93b4dfe9ba09791e280ee2d6c99919f.tar.gz glibc-f4349837d93b4dfe9ba09791e280ee2d6c99919f.tar.bz2 |
Introduce <elf-initfini.h> and ELF_INITFINI for all architectures
This supersedes the init_array sysdeps directory. It allows us to
check for ELF_INITFINI in both C and assembler code, and skip DT_INIT
and DT_FINI processing completely on newer architectures.
A new header file is needed because <dl-machine.h> is incompatible
with assembler code. <sysdep.h> is compatible with assembler code,
but it cannot be included in all assembler files because on some
architectures, it redefines register names, and some assembler files
conflict with that.
<elf-initfini.h> is replicated for legacy architectures which need
DT_INIT/DT_FINI support. New architectures follow the generic default
and disable it.
Diffstat (limited to 'nptl')
-rw-r--r-- | nptl/pt-crti.S | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/nptl/pt-crti.S b/nptl/pt-crti.S index 6c60f8a..3dbef78 100644 --- a/nptl/pt-crti.S +++ b/nptl/pt-crti.S @@ -33,11 +33,18 @@ License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ +#include <elf-initfini.h> + /* Arrange for __pthread_initialize_minimal_internal to be called at libpthread startup, instead of conditionally calling __gmon_start__. */ -#define PREINIT_FUNCTION __pthread_initialize_minimal_internal -#define PREINIT_FUNCTION_WEAK 0 +#if ELF_INITFINI +# define PREINIT_FUNCTION __pthread_initialize_minimal_internal +# define PREINIT_FUNCTION_WEAK 0 -#include <crti.S> +# include <crti.S> +#else + .section .init_array,"a",%init_array + .dc.a __pthread_initialize_minimal_internal +#endif |