• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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