* mips/crt0.S (_start): Allocate 64 bytes of stack instead of 32.

Pass an empty argv and envp to main().
This commit is contained in:
Richard Sandiford 2003-01-08 12:54:29 +00:00
parent c4c533c962
commit afa53b05b0
2 changed files with 19 additions and 12 deletions

View File

@ -1,3 +1,8 @@
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.

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