mips dynamic linker support
[musl] / src / ldso / mips / start.s
1 .hidden _DYNAMIC
2 .hidden __reloc_self
3 .set noreorder
4 .set nomacro
5 .global _start
6 .type _start,@function
7 _start:
8         move $fp, $0
9
10         bgezal $0, 1f
11         nop
12 2:      .gpword 2b
13         .gpword _DYNAMIC
14         .gpword __reloc_self
15 1:      lw $gp, 0($ra)
16         subu $gp, $ra, $gp
17
18         lw $4, 0($sp)
19         addiu $5, $sp, 4
20         lw $6, 4($ra)
21         addu $6, $6, $gp
22         addiu $7, $gp, -0x7ff0
23         subu $sp, $sp, 16
24         lw $25, 8($ra)
25         add $25, $25, $gp
26         jalr $25
27         nop
28
29         lw $25, %call16(__dynlink)($gp)
30         lw $4, 16($sp)
31         addiu $5, $sp, 20
32         jalr $25
33         nop
34
35         add $sp, $sp, 16
36         li $6, -1
37 1:      lw $4, ($sp)
38         lw $5, 4($sp)
39         bne $5, $6, 2f
40         nop
41         addu $sp, $sp, 4
42         addu $4, $4, -4
43         b 1b
44         nop
45 2:      sw $4, ($sp)
46         jr $2