cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

utrap.S (611B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2	.globl		utrap_trap
      3	.type		utrap_trap,#function
      4utrap_trap:		/* %g3=handler,%g4=level */
      5	TRAP_LOAD_THREAD_REG(%g6, %g1)
      6	ldx		[%g6 + TI_UTRAPS], %g1
      7	brnz,pt		%g1, invoke_utrap
      8	 nop
      9
     10	ba,pt		%xcc, etrap
     11	 rd		%pc, %g7
     12	mov		%l4, %o1
     13        call		bad_trap
     14	 add		%sp, PTREGS_OFF, %o0
     15	ba,a,pt		%xcc, rtrap
     16
     17invoke_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