* Copyright (c) 1991 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* %sccs.include.redist.c%
* @(#)crt0.s 5.6 (Berkeley) %G%
#include <machine/regdef.h>
#include <machine/machAsmDefs.h>
.word 0 # null string plus padding
NON_LEAF(__start, 24, ra)
lw s0, 0(sp) # get argc from stack
addu s1, sp, 4 # get pointer to argv
addu s2, s1, 4 # skip null pointer on stack
sll v0, s0, 2 # add number of argv pointers
addu s2, s2, v0 # final pointer to environment list
sw s2, environ # save environment pointer
subu sp, sp, 24 # allocate standard frame
sw zero, 20(sp) # clear return address for debugging
jal monstartup # monstartup(eprol, etext);
jal atexit # atext(mcleanup);
lw a0, 0(s1) # a0 = argv[0];
beq a0, zero, 2f # skip if a0 == NULL
move s3, a0 # save argv[0]
bne v0, zero, 1f # if slash found
move v0, s3 # v0 = argv[0];
jal main # v0 = main(argc, argv, env);
addu sp, sp, 8 # undo push