arg-skipping code for powerpc dynamic linker
[musl] / crt / mips / crt1.s
1 .set noreorder
2
3 .weak  _init
4 .weak  _fini
5 .global __start
6 .global _start
7 __start:
8 _start:
9         subu    $fp, $fp, $fp            # Zero the frame pointer.
10         lui     $gp, %hi(_gp)
11         addi    $gp, %lo(_gp)
12         #la      $gp, _gp
13         lw      $4, %call16(main)($gp)   # Get main() ...
14         lw      $5, ($sp)                # Get argc...
15         addu    $6, $sp, 4               # and argv ...
16         lw      $7, %call16(_init)($gp)  # and _init() ...
17         and     $sp, $sp, -8             # Align the stack pointer to 8 bytes
18         addi    $sp, $sp, -4*6           # Leave space for arguments 0..3, arg4, and arg5.
19         lw      $12, %call16(_fini)($gp) # and _fini() ...
20         sw      $12, 4*4($sp)            # Save arg4.
21         sw      $0, 4*5($sp)             # ldso_fini == NULL
22         lw      $25, %call16(__libc_start_main)($gp)
23         jalr    $25                      # Let's go!
24         nop
25         b       .                        # Never gets here.
26         nop