OSDN Git Service

* mips/crt0.S (_start): Allocate 64 bytes of stack instead of 32.
authorrsandifo <rsandifo>
Wed, 8 Jan 2003 12:54:28 +0000 (12:54 +0000)
committerrsandifo <rsandifo>
Wed, 8 Jan 2003 12:54:28 +0000 (12:54 +0000)
Pass an empty argv and envp to main().

libgloss/ChangeLog
libgloss/mips/crt0.S

index e325c87..7c03dfe 100644 (file)
@@ -1,5 +1,10 @@
 2002-01-08  Richard Sandiford  <rsandifo@redhat.com
 
+       * mips/crt0.S (_start): Allocate 64 bytes of stack instead of 32.
+       Pass an empty argv and envp to main().
+
+2002-01-08  Richard Sandiford  <rsandifo@redhat.com
+
        * mips/configure.in (mips64vr-elf, mips64vrel-elf): New config.
        * mips/configure: Regenerate.
 
index d8d78ed..acb160d 100644 (file)
@@ -157,16 +157,10 @@ zerobss:
        lw      t0,0(a0)                        # last address of memory available
        la      t1,K0BASE                       # cached kernel memory
        addu    t0,t0,t1                        # get the end of memory address
-       /* We must subtract 24 bytes for the 3 8 byte arguments to main, in
-          case main wants to write them back to the stack.  The caller is
-          supposed to allocate stack space for parameters in registers in
-          the old MIPS ABIs.  We must do this even though we aren't passing
-          arguments, because main might be declared to have them.
-
-          Some ports need a larger alignment for the stack, so we subtract
-          32, which satisifes the stack for the arguments and keeps the
-          stack pointer better aligned.  */
-       subu    t0,t0,32                        # and generate a starting stack-pointer
+       /* Allocate 32 bytes for the register parameters.  Allocate 16
+          bytes for a null argv and envp.  Round the result up to 64
+          bytes to preserve alignment.  */
+       subu    t0,t0,64
 4:
        move    sp,t0                           # set stack pointer
        sw      sp,__stackbase                  # keep this for future ref
@@ -213,9 +207,17 @@ init:
        jal     _init                           # run global constructors
        nop
 
-       move    a0,zero                         # set argc to 0
+       addiu   a1,sp,32                        # argv = sp + 32
+       addiu   a2,sp,40                        # envp = sp + 40
+#if __mips64
+       sd      zero,(a1)                       # argv[argc] = 0
+       sd      zero,(a2)                       # envp[0] = 0
+#else
+       sw      zero,(a1)
+       sw      zero,(a2)
+#endif
        jal     main                            # call the program start function
-       nop
+       move    a0,zero                         # set argc to 0
 
        # fall through to the "exit" routine
        jal     exit                            # call libc exit to run the G++