Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
David S. Miller | 6eda3a7 | 2008-04-28 00:47:20 -0700 | [diff] [blame] | 2 | .globl utrap_trap |
| 3 | .type utrap_trap,#function |
| 4 | utrap_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 |
David S. Miller | 49fa523 | 2016-04-27 17:27:37 -0400 | [diff] [blame] | 15 | ba,a,pt %xcc, rtrap |
David S. Miller | 6eda3a7 | 2008-04-28 00:47:20 -0700 | [diff] [blame] | 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 |