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.
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
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++