| David S. Miller | 6eda3a7 | 2008-04-28 00:47:20 -0700 | [diff] [blame] | 1 | 	.globl		utrap_trap | 
 | 2 | 	.type		utrap_trap,#function | 
 | 3 | utrap_trap:		/* %g3=handler,%g4=level */ | 
 | 4 | 	TRAP_LOAD_THREAD_REG(%g6, %g1) | 
 | 5 | 	ldx		[%g6 + TI_UTRAPS], %g1 | 
 | 6 | 	brnz,pt		%g1, invoke_utrap | 
 | 7 | 	 nop | 
 | 8 |  | 
 | 9 | 	ba,pt		%xcc, etrap | 
 | 10 | 	 rd		%pc, %g7 | 
 | 11 | 	mov		%l4, %o1 | 
 | 12 |         call		bad_trap | 
 | 13 | 	 add		%sp, PTREGS_OFF, %o0 | 
 | 14 | 	ba,pt		%xcc, rtrap | 
 | 15 | 	 nop | 
 | 16 |  | 
 | 17 | invoke_utrap: | 
 | 18 | 	sllx		%g3, 3, %g3 | 
 | 19 | 	ldx		[%g1 + %g3], %g1 | 
 | 20 | 	save		%sp, -128, %sp | 
 | 21 | 	rdpr		%tstate, %l6 | 
 | 22 | 	rdpr		%cwp, %l7 | 
 | 23 | 	andn		%l6, TSTATE_CWP, %l6 | 
 | 24 | 	wrpr		%l6, %l7, %tstate | 
 | 25 | 	rdpr		%tpc, %l6 | 
 | 26 | 	rdpr		%tnpc, %l7 | 
 | 27 | 	wrpr		%g1, 0, %tnpc | 
 | 28 | 	done | 
 | 29 | 	.size		utrap_trap,.-utrap_trap |