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
27
28
29
30
31
32
33
| | .global sigsetjmp
.global __sigsetjmp
.type sigsetjmp,@function
.type __sigsetjmp,@function
sigsetjmp:
__sigsetjmp:
or $t5, $a0, $zero
or $t6, $a1, $zero
# comparing save mask with 0, if equals to 0 then
# sigsetjmp is equal to setjmp.
beq $t6, $zero, 1f
st.d $ra, $t5, 160
st.d $s0, $t5, 168
# save base of got so that we can use it later
# once we return from 'longjmp'
la.global $t8, setjmp
or $s0, $a0, $zero
jirl $ra, $t8, 0
or $v1, $v0, $zero # Return from 'setjmp' or 'longjmp'
ld.d $ra, $t5, 160 # Restore ra of sigsetjmp
ld.d $s0, $t5, 168 # Restore $s0 of sigsetjmp
or $a0, $t5, $zero
.hidden __sigsetjmp_tail
la.global $t8, __sigsetjmp_tail
jr $t8
1:
la.global $t8, setjmp
jr $t8
|