diff options
Diffstat (limited to 'crt/mips/crt1.s')
-rw-r--r-- | crt/mips/crt1.s | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crt/mips/crt1.s b/crt/mips/crt1.s new file mode 100644 index 00000000..bdb7c1a7 --- /dev/null +++ b/crt/mips/crt1.s @@ -0,0 +1,25 @@ +.set noreorder + +.weak _init +.weak _fini +.global __start +.global _start +__start: +_start: + subu $fp, $fp, $fp # Zero the frame pointer. + lui $gp, %hi(_gp) + addi $gp, %lo(_gp) + #la $gp, _gp + lw $4, %call16(main)($gp) # Get main() ... + lw $5, ($sp) # Get argc... + addu $6, $sp, 4 # and argv ... + lw $7, %call16(_init)($gp) # and _init() ... + addi $sp, $sp, -4*6 # Leave space for arguments 0..3, arg4, and arg5. + lw $12, %call16(_fini)($gp) # and _fini() ... + sw $12, 4*4($sp) # Save arg4. + sw $0, 4*5($sp) # ldso_fini == NULL + lw $25, %call16(__libc_start_main)($gp) + jalr $25 # Let's go! + nop + b . # Never gets here. + nop |