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