diff options
author | Roland McGrath <roland@gnu.org> | 1996-07-18 08:43:26 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1996-07-18 08:43:26 +0000 |
commit | 49b986270035c7f86c3dc85383fd1da2e413fef9 (patch) | |
tree | 5b1236203c804457e180793a67e3e0e4b489a3d8 /sysdeps/alpha/elf/start.S | |
parent | d7bca0d30b5d3c8ae8421a1994ba24b1b56370d7 (diff) | |
download | glibc-49b986270035c7f86c3dc85383fd1da2e413fef9.tar.gz glibc-49b986270035c7f86c3dc85383fd1da2e413fef9.tar.xz glibc-49b986270035c7f86c3dc85383fd1da2e413fef9.zip |
Thu Jul 18 04:33:21 1996 Roland McGrath <roland@baalperazim.frob.com> cvs/libc-960718
* sysdeps/mach/hurd/errnos.awk: Move EWOULDBLOCK check before errno==0 check. mib's clueless hacking broke it. Thu Jul 18 04:27:21 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * Makerules ($(libdir)/libc.so): Add missing / after $(cryptobjdir). Wed Jul 17 10:54:20 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/alpha/start.S: Move to ... * sysdeps/alpha/elf/start.S: here. * misc/sys/ustat.h: New file. * misc/ustat.h: Ditto. * sysdeps/generic/ustatbits.h: Ditto. * libc-orig/sysdeps/stub/ustat.c: Ditto. * sysdeps/unix/sysv/linux/ustatbits.h: Ditto. * misc/Makefile (headers): Mention ustat.h, sys/ustat.h, and ustatbits.h. (routines): Mention ustat. * sysdeps/unix/sysv/linux/syscalls.list: Mention klogctl in alphabetically correct place. Mention ustat. * sysdeps/unix/alpha/sysdep.S: Make errno a bss symbol, not a common symbol (makes errno accessible from gdb). * login/pututline_r.c (pututline_r): Test ut_id in repositioning test, not ut_type. * login/logwtmp.c (logwtmp): Reimplemented. Must ensure that a record always gets appended at end of file (wtmp is a log file, after all). Set ut_type to DEAD_PROCESS if name is empty. * login/getutid_r.c (getutid_r): Handle search for UT_TYPE in separate loop from search for UT_ID. Fix code so it is in sync with Unix man page. * login/getutline_r.c (getutline_r): Stop searching only if ut_line matches and type is either USER_PROCESS or LOGIN_PROCESS. Tue Jul 16 15:06:18 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/netinet/in.h: Base on <linux/in.h> to avoid duplicate declarations. Sun Jul 14 19:08:55 1996 David Mosberger-Tang <davidm@azstarnet.com> * manual/maint.texi (Supported Configurations): Add alpha-gnu-linux and alpha-gnu-linuxecoff targets. Fri Jul 12 16:58:44 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/netinet/in.h: Declare bindresvport(). Sat Jun 22 23:30:07 1996 David Mosberger-Tang <davidm@azstarnet.com> * resolv/res_send.c (res_send): Declare FROMLEN as size_t instead of int. * resolv/res_comp.c (res_hnok): Use empty statement in place of NULL (which generates a "useless expression" warning in gcc).
Diffstat (limited to 'sysdeps/alpha/elf/start.S')
-rw-r--r-- | sysdeps/alpha/elf/start.S | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/sysdeps/alpha/elf/start.S b/sysdeps/alpha/elf/start.S new file mode 100644 index 0000000000..c534d6987b --- /dev/null +++ b/sysdeps/alpha/elf/start.S @@ -0,0 +1,104 @@ +/* Startup code for Alpha/ELF. +Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +Contributed by Richard Henderson <rth@tamu.edu> + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <sysdep.h> + + .text + .globl __start + .align 3 + .ent __start, 0 +__start: + .frame fp, 0, zero + mov zero, fp + br gp, 1f +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 + + /* 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 + + mov a0, s0 /* tuck them away */ + mov a1, s1 + mov a2, s2 + +#ifdef HAVE_INITFINI + /* Call _init, the entry point to our own .init section. */ + jsr ra, _init + ldgp gp, 0(ra) + + /* Register our .fini section with atexit. */ + lda a0, _fini + jsr ra, atexit + ldgp gp, 0(ra) +#else + /* initialize constructors: */ + jsr ra, __main + ldgp gp, 0(ra) +#endif + mov s0, a0 + mov s1, a1 + mov s2, a2 + + /* Call the user's main and exit with its return value. */ + 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 +END(__start) + +/* Define a symbol for the first piece of initialized data. */ + .data + .globl __data_start +__data_start: + .long 0 + +#ifdef __ELF__ + .size __data_start, 4 + .type __data_start, @object +#endif + +weak_alias(__data_start, data_start) |