diff options
author | Ulrich Drepper <drepper@redhat.com> | 1998-03-31 23:45:03 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1998-03-31 23:45:03 +0000 |
commit | 71bedb76ac4e71537d980705ed8d390950570071 (patch) | |
tree | 2dc751a6fbf89818c1e5d622c97d073b9a6412af /sysdeps/alpha/elf/start.S | |
parent | f5baa731d07c8d9b13bd04f4532f714cddfc8da2 (diff) | |
download | glibc-71bedb76ac4e71537d980705ed8d390950570071.tar.gz glibc-71bedb76ac4e71537d980705ed8d390950570071.tar.xz glibc-71bedb76ac4e71537d980705ed8d390950570071.zip |
Update.
* iconvdata/Makefile: Use libKSC shared object in JOHAB and EUC-KR. * sysdeps/unix/sysv/linux/bits/socket.h (PF_FILE): Correct comment. 1998-03-30 08:43 H.J. Lu <hjl@gnu.org> * sysdeps/alpha/elf/start.S: Let __libc_start_main do most of the init stuff. 1998-03-31 Ulrich Drepper <drepper@cygnus.com> * sysdeps/unix/sysv/linux/alpha/syscalls.list: Wrapper for adjtimex syscall. * sysdeps/unix/sysv/linux/alpha/Makefile (sysdep_routines): Add adjtimex. Patches by Dominik Kubla <kubla@sundiver.zdv.uni-mainz.de>. 1998-03-31 Andreas Jaeger <aj@arthur.rhein-neckar.de> * Makerules (install): Change comment for libc.so following the libc_nonshared changes. 1998-03-31 Ulrich Drepper <drepper@cygnus.com>
Diffstat (limited to 'sysdeps/alpha/elf/start.S')
-rw-r--r-- | sysdeps/alpha/elf/start.S | 58 |
1 files changed, 13 insertions, 45 deletions
diff --git a/sysdeps/alpha/elf/start.S b/sysdeps/alpha/elf/start.S index a67a39a49f..1330d1fda2 100644 --- a/sysdeps/alpha/elf/start.S +++ b/sysdeps/alpha/elf/start.S @@ -1,5 +1,5 @@ /* Startup code for Alpha/ELF. - Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson <rth@tamu.edu> @@ -31,56 +31,24 @@ _start: 1: ldgp gp, 0(gp) .prologue 1 - /* Save v0. When starting a binary via the dynamic linker, s0 - contains the address of the shared library termination function, - which we will register below with atexit() to be called by exit(). - If we are statically linked, this will be NULL. */ - mov v0, s0 + /* Load address of the user's main function. */ + lda a0, main - /* Do essential libc initialization (sp points to argc, argv, and envp) */ - jsr ra, __libc_init_first - ldgp gp, 0(ra) - - /* Now that we have the proper stack frame, register library termination - function, if there is any: */ - - beq s0, 1f - mov s0, a0 - jsr ra, atexit - ldgp gp, 0(ra) -1: - - /* Extract the arguments and environment as encoded on the stack. */ - ldl a0, 0(sp) /* get argc */ - lda a1, 8(sp) /* get argv */ - s8addq a0, a1, a2 /* get envp */ - addq a2, 8, a2 - stq a2, _environ + ldl a1, 0(sp) /* get argc */ + lda a2, 8(sp) /* get argv */ - mov a0, s0 /* tuck them away */ - mov a1, s1 - mov a2, s2 + /* Load address of our own entry points to .fini and .init. */ + lda a3, _init + lda a4, _fini - /* Call _init, the entry point to our own .init section. */ - jsr ra, _init - ldgp gp, 0(ra) + /* Store address of the shared library termination function. */ + mov v0, a5 - /* Register our .fini section with atexit. */ - lda a0, _fini - jsr ra, atexit + /* Call the user's main function, and exit with its value. + But let the libc call main. */ + jsr ra, __libc_start_main ldgp gp, 0(ra) - /* Call the user's main and exit with its return value. */ - mov s0, a0 - mov s1, a1 - mov s2, a2 - - jsr ra, main - ldgp gp, 0(ra) - - mov v0, a0 - jsr ra, exit - /* Die very horribly if exit returns. Call_pal hlt is callable from kernel mode only; this will result in an illegal instruction trap. */ call_pal 0 |