blob: c0c6961f8f2a944306ac9f47f2a50b19ae86f309 [file] [log] [blame]
Rich Felker5972c4a2016-04-18 05:19:13 +00001.set noreorder
2.global sigsetjmp
3.global __sigsetjmp
4.type sigsetjmp,@function
5.type __sigsetjmp,@function
6sigsetjmp:
7__sigsetjmp:
8 lui $3, %hi(%neg(%gp_rel(sigsetjmp)))
9 addiu $3, $3, %lo(%neg(%gp_rel(sigsetjmp)))
10
11 # comparing save mask with 0, if equals to 0 then
12 # sigsetjmp is equal to setjmp.
13 beq $5, $0, 1f
14 addu $3, $3, $25
15 sd $ra, 160($4)
16 sd $16, 168($4)
17
18 # save base of got so that we can use it later
19 # once we return from 'longjmp'
20 sd $3, 176($4)
21 lw $25, %got_disp(setjmp)($3)
22 jalr $25
23 move $16, $4
24
25 move $5, $2 # Return from 'setjmp' or 'longjmp'
26 move $4, $16 # Restore the pointer-to-sigjmp_buf
27 ld $ra, 160($4) # Restore ra of sigsetjmp
28 ld $16, 168($4) # Restore $16 of sigsetjmp
29 ld $3, 176($4) # Restore base of got
30
31.hidden __sigsetjmp_tail
32 lw $25, %got_disp(__sigsetjmp_tail)($3)
33 jr $25
34 nop
351:
36 lw $25, %got_disp(setjmp)($3)
37 jr $25
38 nop