diff options
-rw-r--r-- | libgloss/ChangeLog | 5 | ||||
-rw-r--r-- | libgloss/mips/crt0.S | 26 |
2 files changed, 19 insertions, 12 deletions
diff --git a/libgloss/ChangeLog b/libgloss/ChangeLog index e325c87..7c03dfe 100644 --- a/libgloss/ChangeLog +++ b/libgloss/ChangeLog @@ -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. diff --git a/libgloss/mips/crt0.S b/libgloss/mips/crt0.S index d8d78ed..acb160d 100644 --- a/libgloss/mips/crt0.S +++ b/libgloss/mips/crt0.S @@ -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++ |