+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>
* debug/chk_fail.c (__chk_fail): Add a while (1) loop around
endif
ifeq (yes,$(build-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))
tests-static += tst-tls9-static
tst-tls9-static-ENV = \
$(objpfx)tst-array1 > $@
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.out: $(objpfx)tst-array2
$(elf-objpfx)$(rtld-installed-name) \
__attribute__ ((noreturn));
-/* Note: the fini parameter is ignored here. It used to be registered
- with __cxa_atexit. This had the disadvantage that finalizers were
- called in more than one place. */
+/* Note: the fini parameter is ignored here for shared library. It
+ is registered with __cxa_atexit. This had the disadvantage that
+ finalizers were called in more than one place. */
STATIC int
LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
int argc, char *__unbounded *__unbounded ubp_av,
if (__builtin_expect (rtld_fini != NULL, 1))
__cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL);
+#ifndef SHARED
/* 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
run the constructors in `_dl_start_user'. */
-#ifndef SHARED
__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
the standard file descriptors are not opened. We have to do this
only for statically linked applications since otherwise the dynamic