aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/libc-start.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-03-08 15:26:29 +0000
committerUlrich Drepper <drepper@redhat.com>1998-03-08 15:26:29 +0000
commit3db52d94e2dcd03925664df6a09e9676ad1f2baf (patch)
treec52e151c8bbe577afba5c1e6a0a084641853ce7f /sysdeps/unix/sysv/linux/libc-start.c
parenta78de796b7911443b7af40177ee9c33cf69a82e5 (diff)
downloadglibc-3db52d94e2dcd03925664df6a09e9676ad1f2baf.zip
glibc-3db52d94e2dcd03925664df6a09e9676ad1f2baf.tar.gz
glibc-3db52d94e2dcd03925664df6a09e9676ad1f2baf.tar.bz2
Update.
1998-03-08 14:58 Ulrich Drepper <drepper@cygnus.com> * Makeconfig (nisobjdir): Set to path to nis directory. (rpath-link): Add nisobjdir. Patch by Sven Verdoolaege <skimo@kotnet.org>. * elf/Makefile: Pretty print. * elf/dl-lookup.c: Include unistd.h. * elf/dl-runtime.c: Likewise. * localedata/Makefile (test-srcs): Add tst-rpmatch. (distribute): Add tst-rpmatch.sh. (tests): Add tst-rpmatch to dependency list and run tst-rpmatch.sh. New tests for rpmatch function by Jochen Hein <jochen.hein@delphi.central.de>. * localedata/tst-rpmatch.c: New file. * localedata/tst-rpmatch.sh: New file. * localedata/locales/de_DE: Correct yesexpr and noexpr. * localedata/locales/de_AT: Likewise. * posix/getopt.c: Update contact address. * posix/getopt1.c: Pretty print. * sysdeps/generic/libc-start.c: Do most of the initialization now here instead of in start.S. * sysdeps/unix/sysv/linux/libc-start.c: Likewise. * sysdeps/i386/elf/start.S: Remove most of the initialization code. * sysdeps/unix/sysv/linux/i386/profil-counter.h: No need for profil_counter to be public. 1998-03-08 13:06 Tim Waugh <tim@cyberelk.demon.co.uk> * posix/wordexp.c (parse_arith): Now works for negative numbers too. (parse_param): Coded parameter length expansion (${#var}). (parse_param): Handling for "=", "+", "-", and the ":" versions added. (parse_param): Cleaned up (fixed) error handling. * posix/wordexp-test.c: IFS now includes non-whitespace character (comma). Added more tests.
Diffstat (limited to 'sysdeps/unix/sysv/linux/libc-start.c')
-rw-r--r--sysdeps/unix/sysv/linux/libc-start.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/sysdeps/unix/sysv/linux/libc-start.c b/sysdeps/unix/sysv/linux/libc-start.c
index f142195..e9d21a6 100644
--- a/sysdeps/unix/sysv/linux/libc-start.c
+++ b/sysdeps/unix/sysv/linux/libc-start.c
@@ -17,15 +17,44 @@
Boston, MA 02111-1307, USA. */
#include <link.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+extern void __libc_init_first (void);
int
__libc_start_main (int (*main) (int, char **, char **), int argc,
- char **argv, char **envp)
+ char **argv, void (*init) (void), void (*fini) (void),
+ void (*rtld_fini) (void))
{
+ /* Register the destructor of the dynamic linker if there is any. */
+ if (rtld_fini != NULL)
+ atexit (rtld_fini);
+
+ /* Call the initializer of the libc. */
+#ifdef PIC
+ if (_dl_debug_impcalls)
+ _dl_debug_message ("\tinitialize libc\n\n", NULL);
+#endif
+ __libc_init_first ();
+
+ /* Set the global _environ variable correctly. */
+ __environ = &argv[argc + 1];
+
+ /* Call the initializer of the program. */
+#ifdef PIC
+ if (_dl_debug_impcalls)
+ _dl_debug_message ("\tinitialize program: ", argv[0], "\n\n", NULL);
+#endif
+ (*init) ();
+
+ /* Register the destructor of the program. */
+ atexit (fini);
+
#ifdef PIC
if (_dl_debug_impcalls)
_dl_debug_message ("\ttransferring control: ", argv[0], "\n\n", NULL);
#endif
- return (*main) (argc, argv, envp);
+ exit ((*main) (argc, argv, __environ));
}