From d417e0ffc4d2707b0d684106f17554395e8be220 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 24 Feb 2002 08:34:04 +0000 Subject: [PATCH] Update. 2002-02-24 Ulrich Drepper * elf/dl-support.c (_dl_non_dynamic_init): Renamed from non_dynamic_init and exported now. * sysdeps/unix/sysv/linux/ldsodefs.h: Declare _dl_non_dynamic_init. * sysdeps/unix/sysv/linux/init-first.c: Call _dl_non_dynamic_init for !SHARED. * sysdeps/mach/hurd/i386/init-first.c: Likewise. * sysdeps/mach/hurd/powerpc/init-first.c: Likewise. * sysdeps/mach/hurd/mips/init-first.c: Likewise. --- ChangeLog | 11 +++++++++++ elf/dl-support.c | 8 ++++---- sysdeps/mach/hurd/i386/init-first.c | 6 ++++++ sysdeps/mach/hurd/mips/init-first.c | 6 ++++++ sysdeps/mach/hurd/powerpc/init-first.c | 6 ++++++ sysdeps/unix/sysv/linux/init-first.c | 4 ++++ sysdeps/unix/sysv/linux/ldsodefs.h | 5 ++++- 7 files changed, 41 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 383c6a3..ae639c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2002-02-24 Ulrich Drepper + + * elf/dl-support.c (_dl_non_dynamic_init): Renamed from + non_dynamic_init and exported now. + * sysdeps/unix/sysv/linux/ldsodefs.h: Declare _dl_non_dynamic_init. + * sysdeps/unix/sysv/linux/init-first.c: Call _dl_non_dynamic_init for + !SHARED. + * sysdeps/mach/hurd/i386/init-first.c: Likewise. + * sysdeps/mach/hurd/powerpc/init-first.c: Likewise. + * sysdeps/mach/hurd/mips/init-first.c: Likewise. + 2002-02-23 Ulrich Drepper * elf/dl-close.c (free_slotinfo): Check for end of list and return diff --git a/elf/dl-support.c b/elf/dl-support.c index 876776a..5452dd1 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -177,10 +177,10 @@ _dl_aux_init (ElfW(auxv_t) *av) } #endif -static void non_dynamic_init (void) __attribute__ ((unused)); -static void -non_dynamic_init (void) +void +internal_function +_dl_non_dynamic_init (void) { if (HP_TIMING_AVAIL) HP_TIMING_NOW (_dl_cpuclock_offset); @@ -228,7 +228,7 @@ non_dynamic_init (void) if (_dl_platform != NULL) _dl_platformlen = strlen (_dl_platform); } -text_set_element (__libc_subinit, non_dynamic_init); + const struct r_strlenpair * internal_function diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c index f8149da..ad32b30 100644 --- a/sysdeps/mach/hurd/i386/init-first.c +++ b/sysdeps/mach/hurd/i386/init-first.c @@ -33,6 +33,9 @@ extern void __init_misc (int, char **, char **); #ifdef USE_NONOPTION_FLAGS extern void __getopt_clean_environment (char **); #endif +#ifndef SHARED +extern void _dl_non_dynamic_init (void) internal_function; +#endif extern void __libc_global_ctors (void); unsigned int __hurd_threadvar_max; @@ -65,6 +68,9 @@ posixland_init (int argc, char **argv, char **envp) __libc_argv = argv; __environ = envp; +#ifndef SHARED + _dl_non_dynamic_init (); +#endif __init_misc (argc, argv, envp); __libc_init (argc, argv, envp); diff --git a/sysdeps/mach/hurd/mips/init-first.c b/sysdeps/mach/hurd/mips/init-first.c index 525f510..07b8e9e 100644 --- a/sysdeps/mach/hurd/mips/init-first.c +++ b/sysdeps/mach/hurd/mips/init-first.c @@ -31,6 +31,9 @@ extern void __init_misc (int, char **, char **); #ifdef USE_NONOPTION_FLAGS extern void __getopt_clean_environment (char **); #endif +#ifndef SHARED +extern void _dl_non_dynamic_init (void) internal_function; +#endif extern void __libc_global_ctors (void); unsigned int __hurd_threadvar_max; @@ -107,6 +110,9 @@ init1 (int argc, char *arg0, ...) d->portarray, d->portarraysize, d->intarray, d->intarraysize); +#ifndef SHARED + _dl_non_dynamic_init (); +#endif __init_misc (argc, argv, __environ); __libc_init (argc, argv, __environ); diff --git a/sysdeps/mach/hurd/powerpc/init-first.c b/sysdeps/mach/hurd/powerpc/init-first.c index c9ad660..18e824a 100644 --- a/sysdeps/mach/hurd/powerpc/init-first.c +++ b/sysdeps/mach/hurd/powerpc/init-first.c @@ -33,6 +33,9 @@ extern void __init_misc (int, char **, char **); #ifdef USE_NONOPTION_FLAGS extern void __getopt_clean_environment (char **); #endif +#ifndef SHARED +extern void _dl_non_dynamic_init (void) internal_function; +#endif extern void __libc_global_ctors (void); unsigned int __hurd_threadvar_max; @@ -70,6 +73,9 @@ posixland_init (int argc, char **argv, char **envp) __libc_argv = argv; __environ = envp; +#ifndef SHARED + _dl_non_dynamic_init (); +#endif __init_misc (argc, argv, envp); __libc_init (argc, argv, envp); diff --git a/sysdeps/unix/sysv/linux/init-first.c b/sysdeps/unix/sysv/linux/init-first.c index 1fb04bb..7568a32 100644 --- a/sysdeps/unix/sysv/linux/init-first.c +++ b/sysdeps/unix/sysv/linux/init-first.c @@ -87,6 +87,10 @@ init (int argc, char **argv, char **envp) #ifndef SHARED __libc_init_secure (); + + /* First the initialization which normally would be done by the + dynamic linker. */ + _dl_non_dynamic_init (); #endif __init_misc (argc, argv, envp); diff --git a/sysdeps/unix/sysv/linux/ldsodefs.h b/sysdeps/unix/sysv/linux/ldsodefs.h index 6e1a13e..8e37f4d 100644 --- a/sysdeps/unix/sysv/linux/ldsodefs.h +++ b/sysdeps/unix/sysv/linux/ldsodefs.h @@ -1,5 +1,5 @@ /* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -32,6 +32,9 @@ /* Used by static binaries to check the auxiliary vector. */ extern void _dl_aux_init (ElfW(auxv_t) *av) internal_function; +/* Initialization which is normally done by the dynamic linker. */ +extern void _dl_non_dynamic_init (void) internal_function; + /* We can assume that the kernel always provides the AT_UID, AT_EUID, AT_GID, and AT_EGID values in the auxiliary vector. */ #define HAVE_AUX_XID -- 2.7.4