1.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 daddiu $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 daddu $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 ld $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 ld $25, %got_disp(__sigsetjmp_tail)($3) 33 jr $25 34 nop 351: 36 ld $25, %got_disp(setjmp)($3) 37 jr $25 38 nop 39