* 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:
parent
c4c533c962
commit
afa53b05b0
|
@ -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.
|
||||
|
|
|
@ -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++
|
||||
|
|
Loading…
Reference in New Issue