* csu/elf-init.c (__libc_csu_fini): Enable if LIBC_NONSHARED

isn't defined.
	* sysdeps/generic/libc-start.c (LIBC_START_MAIN): Call fini
	if SHARED isn't defined.
	* elf/Makefile (tests-static): Add tst-array1-static.
	($(objpfx)tst-array1-static.out): New target.
	* elf/tst-array1-static.c: New file.
This commit is contained in:
Ulrich Drepper 2005-02-14 21:25:50 +00:00
parent e38c954b3b
commit 43c59a705b
5 changed files with 27 additions and 7 deletions

View File

@ -1,3 +1,13 @@
2005-02-14 H.J. Lu <hongjiu.lu@intel.com>
* csu/elf-init.c (__libc_csu_fini): Enable if LIBC_NONSHARED
isn't defined.
* sysdeps/generic/libc-start.c (LIBC_START_MAIN): Call fini
if SHARED isn't defined.
* elf/Makefile (tests-static): Add tst-array1-static.
($(objpfx)tst-array1-static.out): New target.
* elf/tst-array1-static.c: New file.
2005-02-11 Jakub Jelinek <jakub@redhat.com> 2005-02-11 Jakub Jelinek <jakub@redhat.com>
* debug/chk_fail.c (__chk_fail): Add a while (1) loop around * debug/chk_fail.c (__chk_fail): Add a while (1) loop around

View File

@ -92,7 +92,7 @@ __libc_csu_init (void)
void void
__libc_csu_fini (void) __libc_csu_fini (void)
{ {
#if 0 #ifndef LIBC_NONSHARED
#ifdef HAVE_INITFINI_ARRAY #ifdef HAVE_INITFINI_ARRAY
size_t i = __fini_array_end - __fini_array_start; size_t i = __fini_array_end - __fini_array_start;
while (i-- > 0) while (i-- > 0)

View File

@ -138,6 +138,9 @@ tests += tst-array1 tst-array2 tst-array3 tst-array4
endif endif
ifeq (yes,$(build-static)) ifeq (yes,$(build-static))
tests-static = tst-tls1-static tst-tls2-static tests-static = tst-tls1-static tst-tls2-static
ifeq (yes,$(have-initfini-array))
tests-static += tst-array1-static
endif
ifeq (yesyesyes,$(build-static)$(build-shared)$(elf)) ifeq (yesyesyes,$(build-static)$(build-shared)$(elf))
tests-static += tst-tls9-static tests-static += tst-tls9-static
tst-tls9-static-ENV = \ tst-tls9-static-ENV = \
@ -701,6 +704,10 @@ $(objpfx)tst-array1.out: $(objpfx)tst-array1
$(objpfx)tst-array1 > $@ $(objpfx)tst-array1 > $@
cmp $@ tst-array1.exp > /dev/null cmp $@ tst-array1.exp > /dev/null
$(objpfx)tst-array1-static.out: $(objpfx)tst-array1-static
$(objpfx)tst-array1-static > $@
cmp $@ tst-array1.exp > /dev/null
$(objpfx)tst-array2: $(objpfx)tst-array2dep.so $(objpfx)tst-array2: $(objpfx)tst-array2dep.so
$(objpfx)tst-array2.out: $(objpfx)tst-array2 $(objpfx)tst-array2.out: $(objpfx)tst-array2
$(elf-objpfx)$(rtld-installed-name) \ $(elf-objpfx)$(rtld-installed-name) \

1
elf/tst-array1-static.c Normal file
View File

@ -0,0 +1 @@
#include "tst-array1.c"

View File

@ -81,9 +81,9 @@ STATIC int LIBC_START_MAIN (int (*main) (int, char **, char **
__attribute__ ((noreturn)); __attribute__ ((noreturn));
/* Note: the fini parameter is ignored here. It used to be registered /* Note: the fini parameter is ignored here for shared library. It
with __cxa_atexit. This had the disadvantage that finalizers were is registered with __cxa_atexit. This had the disadvantage that
called in more than one place. */ finalizers were called in more than one place. */
STATIC int STATIC int
LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
int argc, char *__unbounded *__unbounded ubp_av, int argc, char *__unbounded *__unbounded ubp_av,
@ -155,14 +155,16 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
if (__builtin_expect (rtld_fini != NULL, 1)) if (__builtin_expect (rtld_fini != NULL, 1))
__cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL); __cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL);
#ifndef SHARED
/* Call the initializer of the libc. This is only needed here if we /* Call the initializer of the libc. This is only needed here if we
are compiling for the static library in which case we haven't are compiling for the static library in which case we haven't
run the constructors in `_dl_start_user'. */ run the constructors in `_dl_start_user'. */
#ifndef SHARED
__libc_init_first (argc, argv, __environ); __libc_init_first (argc, argv, __environ);
#endif
#ifndef SHARED /* Register the destructor of the program, if any. */
if (fini)
__cxa_atexit ((void (*) (void *)) fini, NULL, NULL);
/* Some security at this point. Prevent starting a SUID binary where /* Some security at this point. Prevent starting a SUID binary where
the standard file descriptors are not opened. We have to do this the standard file descriptors are not opened. We have to do this
only for statically linked applications since otherwise the dynamic only for statically linked applications since otherwise the dynamic