Wed May 22 00:40:50 1996 David Mosberger-Tang <davidm@azstarnet.com>
authorRoland McGrath <roland@gnu.org>
Fri, 24 May 1996 06:00:28 +0000 (06:00 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 24 May 1996 06:00:28 +0000 (06:00 +0000)
* sysdeps/alpha/_mcount.S, sysdeps/alpha/bb_init_func.S,
  sysdeps/alpha/bsd-_setjmp.S, sysdeps/alpha/ffs.S,
  sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/memchr.S,
  sysdeps/alpha/setjmp.S, sysdeps/alpha/strlen.S,
  sysdeps/alpha/udiv_qrnnd.S, sysdeps/unix/sysv/linux/alpha/brk.S,
  sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
  sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
  sysdeps/unix/sysv/linux/alpha/pipe.S,
  sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
  sysdeps/unix/sysv/linux/alpha/syscall.S,
  sysdeps/unix/sysv/linux/alpha/start.S,
  sysdeps/unix/sysv/linux/alpha/sysdep.S: Remove include of regdef.h.
   sysdep.h includes it now. Replace ENTRY by LEAF with appropriate
  framesize declaration.  Replace "lda pv,sym/jsr pv" by "jsr sym".

sysdeps/unix/sysv/linux/alpha/start.S

index d1966a8..a7099f6 100644 (file)
@@ -18,11 +18,16 @@ Cambridge, MA 02139, USA.  */
 
 #include <sysdep.h>
 
-.comm errno, 4
+       .comm errno, 4
+#ifdef __ELF__
+       .type errno, @object
+#endif
 
        .text
-ENTRY(__start)
+LEAF(__start, 16)
        lda     sp, -16(sp)
+       .prologue 0
+
        stq     zero, 8(sp)             /* terminate frame chain */
 
        br      t0, 1f
@@ -33,8 +38,7 @@ ENTRY(__start)
        ldgp    gp, 0(ra)
 
        /* clear out errno. */
-       lda     t0, errno
-       stl     zero, 0(t0)
+       stl     zero, (errno)
 
        ldl     a0, 16(sp)      /* get argc */
        lda     a1, 24(sp)      /* get argv */
@@ -45,26 +49,32 @@ ENTRY(__start)
        addq    a2, 0x8, a2
        stq     a2, 0(t0)
 
-#ifndef HAVE_INITFINI
        mov     a0, s0
        mov     a1, s1
        mov     a2, s2
 
-       jsr     ra, __libc_init
+#ifdef HAVE_INITFINI
+       /* register the _fini sections to ensure destructors get run: */
+       lda     a0, _fini
+       jsr     ra, atexit
        ldgp    gp, 0(ra)
 
-       mov     s0, a0
-       mov     s1, a1
-       mov     s2, a2
+       /* Now run the _init section of the program itself.  The _init
+          sections of shared libraries will be run by the dynamic linker.  */
+       jsr     ra, _init
+       ldgp    gp, 0(ra)
 
        /* initialize constructors: */
        jsr     ra, __main
        ldgp    gp, 0(ra)
+#else
+       jsr     ra, __libc_init
+       ldgp    gp, 0(ra)
+#endif
 
        mov     s0, a0
        mov     s1, a1
        mov     s2, a2
-#endif
 
        jsr     ra, main
        ldgp    gp, 0(ra)
@@ -90,4 +100,9 @@ ENTRY(__start)
 __data_start:
        .long 0
 
+#ifdef __ELF__
+       .size __data_start, 4
+       .type __data_start, @object
+#endif
+
 weak_alias(__data_start, data_start)