summaryrefslogtreecommitdiff
path: root/crt/mips/crt1.s
blob: 093d7d562afe7a06d723116d97ffa08235384e56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
.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() ...
	and     $sp, $sp, -8             # Align the stack pointer to 8 bytes
	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