* ========== Copyright Header Begin ==========================================
* Hypervisor Software File: traptable.s
* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
* - Do no alter or remove copyright notices
* - Redistribution and use of this software in source and binary forms, with
* or without modification, are permitted provided that the following
* - Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistribution in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* This software is provided "AS IS," without a warranty of any kind.
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
* MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
* DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
* ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
* SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* You acknowledge that this software is not designed, licensed or
* intended for use in the design, construction, operation or maintenance of
* ========== Copyright Header End ============================================
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
.ident "@(#)traptable.s 1.43 07/09/14 SMI"
* Niagara hypervisor trap table
#include <sys/asm_linkage.h>
* The basic hypervisor trap table
* We use the linker to place this at the beginning of the hypervisor
* binary which gets loaded at an appropriate alignment by Reset/Config.
TRAP(tt0_000, NOT) /* reserved */
TRAP(tt0_001, POR) /* power-on reset */
TRAP(tt0_002, GOTO(watchdog)) /* watchdog reset */
TRAP(tt0_003, GOTO(xir)) /* externally initiated reset */
TRAP(tt0_004, NOT) /* software initiated reset */
TRAP(tt0_005, NOT) /* red mode exception */
TRAP(tt0_006, NOT) /* reserved */
TRAP(tt0_007, NOT) /* reserved */
TRAP(tt0_008, GOTO(immu_err)) /* instruction access exception */
TRAP(tt0_009, NOT) /* instruction access mmu miss */
TRAP(tt0_00a, UE_ERR) /* instruction access error */
TRAP(tt0_00b, NOT) /* reserved */
TRAP(tt0_00c, NOT) /* reserved */
TRAP(tt0_00d, NOT) /* reserved */
TRAP(tt0_00e, NOT) /* reserved */
TRAP(tt0_00f, NOT) /* reserved */
TRAP(tt0_010, REVECTOR(TT_ILLINST)) /* illegal instruction */
TRAP(tt0_011, REVECTOR(TT_PRIVOP)) /* privileged opcode */
TRAP(tt0_012, REVECTOR(TT_UNIMP_LDD)) /* unimplemented LDD */
TRAP(tt0_013, REVECTOR(TT_UNIMP_STD)) /* unimplemented STD */
TRAP(tt0_014, NOT) /* reserved */
TRAP(tt0_015, NOT) /* reserved */
TRAP(tt0_016, NOT) /* reserved */
TRAP(tt0_017, NOT) /* reserved */
TRAP(tt0_018, NOT) /* reserved */
TRAP(tt0_019, NOT) /* reserved */
TRAP(tt0_01a, NOT) /* reserved */
TRAP(tt0_01b, NOT) /* reserved */
TRAP(tt0_01c, NOT) /* reserved */
TRAP(tt0_01d, NOT) /* reserved */
TRAP(tt0_01e, NOT) /* reserved */
TRAP(tt0_01f, NOT) /* reserved */
TRAP(tt0_020, NOT) /* fp disabled */
TRAP(tt0_021, NOT) /* fp exception ieee 754 */
TRAP(tt0_022, NOT) /* fp exception other */
TRAP(tt0_023, NOT) /* tag overflow */
BIGTRAP(tt0_024, CLEAN_WINDOW) /* clean window */
TRAP(tt0_028, NOT) /* division by zero */
TRAP(tt0_029, UE_ERR) /* internal processor error */
TRAP(tt0_02a, NOT) /* reserved */
TRAP(tt0_02b, NOT) /* reserved */
TRAP(tt0_02c, NOT) /* reserved */
TRAP(tt0_02d, NOT) /* reserved */
TRAP(tt0_02e, NOT) /* reserved */
TRAP(tt0_02f, NOT) /* reserved */
TRAP(tt0_030, GOTO(dmmu_err)) /* data access exception */
TRAP(tt0_031, NOT) /* data access mmu miss */
TRAP(tt0_032, UE_ERR) /* data access error */
TRAP(tt0_033, UE_ERR) /* data access protection */
TRAP(tt0_034, GOTO(dmmu_err)) /* mem address not aligned */
TRAP(tt0_035, GOTO(dmmu_err)) /* lddf mem address not aligned */
TRAP(tt0_036, GOTO(dmmu_err)) /* stdf mem address not aligned */
TRAP(tt0_037, GOTO(dmmu_err)) /* privileged action */
TRAP(tt0_038, GOTO(dmmu_err)) /* ldqf mem address not aligned */
TRAP(tt0_039, GOTO(dmmu_err)) /* stqf mem address not aligned */
TRAP(tt0_03a, NOT) /* reserved */
TRAP(tt0_03b, NOT) /* reserved */
TRAP(tt0_03c, NOT) /* reserved */
TRAP(tt0_03d, NOT) /* reserved */
TRAP(tt0_03e, RIMMU_MISS) /* HV: real immu miss */
TRAP(tt0_03f, RDMMU_MISS) /* HV: real dmmu miss */
TRAP(tt0_040, NOT) /* async data error */
TRAP(tt0_041, NOT) /* interrupt level 1 */
TRAP(tt0_042, NOT) /* interrupt level 2 */
TRAP(tt0_043, NOT) /* interrupt level 3 */
TRAP(tt0_044, NOT) /* interrupt level 4 */
TRAP(tt0_045, NOT) /* interrupt level 5 */
TRAP(tt0_046, NOT) /* interrupt level 6 */
TRAP(tt0_047, NOT) /* interrupt level 7 */
TRAP(tt0_048, NOT) /* interrupt level 8 */
TRAP(tt0_049, NOT) /* interrupt level 9 */
TRAP(tt0_04a, NOT) /* interrupt level a */
TRAP(tt0_04b, NOT) /* interrupt level b */
TRAP(tt0_04c, NOT) /* interrupt level c */
TRAP(tt0_04d, NOT) /* interrupt level d */
TRAP(tt0_04e, NOT) /* interrupt level e */
TRAP(tt0_04f, NOT) /* interrupt level f */
TRAP(tt0_050, NOT) /* reserved */
TRAP(tt0_051, NOT) /* reserved */
TRAP(tt0_052, NOT) /* reserved */
TRAP(tt0_053, NOT) /* reserved */
TRAP(tt0_054, NOT) /* reserved */
TRAP(tt0_055, NOT) /* reserved */
TRAP(tt0_056, NOT) /* reserved */
TRAP(tt0_057, NOT) /* reserved */
TRAP(tt0_058, NOT) /* reserved */
TRAP(tt0_059, NOT) /* reserved */
TRAP(tt0_05a, NOT) /* reserved */
TRAP(tt0_05b, NOT) /* reserved */
TRAP(tt0_05c, NOT) /* reserved */
TRAP(tt0_05d, NOT) /* reserved */
TRAP(tt0_05e, HSTICK_INTR) /* HV: hstick match */
TRAP(tt0_05f, NOT) /* reserved */
TRAP(tt0_060, VECINTR) /* interrupt vector */
TRAP(tt0_061, NOT) /* RA watchpoint */
TRAP(tt0_062, NOT) /* VA watchpoint */
TRAP(tt0_063, CE_ERR) /* corrected ECC error XXX */
BIGTRAP(tt0_064, IMMU_MISS) /* fast instruction access MMU miss */
BIGTRAP(tt0_068, DMMU_MISS) /* fast data access MMU miss */
BIGTRAP(tt0_06C, DMMU_PROT) /* fast data access protection */
TRAP(tt0_070, NOT) /* reserved */
TRAP(tt0_071, NOT) /* reserved */
TRAP(tt0_072, NOT) /* reserved */
TRAP(tt0_073, NOT) /* reserved */
TRAP(tt0_074, MAUINTR) /* modular arithmetic unit */
TRAP(tt0_075, NOT) /* reserved */
TRAP(tt0_076, NOT) /* reserved */
TRAP(tt0_077, NOT) /* reserved */
TRAP(tt0_078, DIS_UE_ERR) /* data error (disrupting) */
TRAP(tt0_079, NOT) /* reserved */
TRAP(tt0_07a, NOT) /* reserved */
TRAP(tt0_07b, NOT) /* reserved */
TRAP(tt0_07c, NOT) /* HV: cpu mondo */
TRAP(tt0_07d, NOT) /* HV: dev mondo */
TRAP(tt0_07e, NOT) /* HV: resumable error */
TRAP(tt0_07f, NOT) /* HV: non-resumable error */
BIGTRAP(tt0_080, SPILL_WINDOW) /* spill 0 normal */
BIGTRAP(tt0_084, SPILL_WINDOW) /* spill 1 normal */
BIGTRAP(tt0_088, SPILL_WINDOW) /* spill 2 normal */
BIGTRAP(tt0_08c, SPILL_WINDOW) /* spill 3 normal */
BIGTRAP(tt0_090, SPILL_WINDOW) /* spill 4 normal */
BIGTRAP(tt0_094, SPILL_WINDOW) /* spill 5 normal */
BIGTRAP(tt0_098, SPILL_WINDOW) /* spill 6 normal */
BIGTRAP(tt0_09c, SPILL_WINDOW) /* spill 7 normal */
BIGTRAP(tt0_0a0, SPILL_WINDOW) /* spill 0 other */
BIGTRAP(tt0_0a4, SPILL_WINDOW) /* spill 1 other */
BIGTRAP(tt0_0a8, SPILL_WINDOW) /* spill 2 other */
BIGTRAP(tt0_0ac, SPILL_WINDOW) /* spill 3 other */
BIGTRAP(tt0_0b0, SPILL_WINDOW) /* spill 4 other */
BIGTRAP(tt0_0b4, SPILL_WINDOW) /* spill 5 other */
BIGTRAP(tt0_0b8, SPILL_WINDOW) /* spill 6 other */
BIGTRAP(tt0_0bc, SPILL_WINDOW) /* spill 7 other */
BIGTRAP(tt0_0c0, FILL_WINDOW) /* fill 0 normal */
BIGTRAP(tt0_0c4, FILL_WINDOW) /* fill 1 normal */
BIGTRAP(tt0_0c8, FILL_WINDOW) /* fill 2 normal */
BIGTRAP(tt0_0cc, FILL_WINDOW) /* fill 3 normal */
BIGTRAP(tt0_0d0, FILL_WINDOW) /* fill 4 normal */
BIGTRAP(tt0_0d4, FILL_WINDOW) /* fill 5 normal */
BIGTRAP(tt0_0d8, FILL_WINDOW) /* fill 6 normal */
BIGTRAP(tt0_0dc, FILL_WINDOW) /* fill 7 normal */
BIGTRAP(tt0_0e0, FILL_WINDOW) /* fill 0 other */
BIGTRAP(tt0_0e4, FILL_WINDOW) /* fill 1 other */
BIGTRAP(tt0_0e8, FILL_WINDOW) /* fill 2 other */
BIGTRAP(tt0_0ec, FILL_WINDOW) /* fill 3 other */
BIGTRAP(tt0_0f0, FILL_WINDOW) /* fill 4 other */
BIGTRAP(tt0_0f4, FILL_WINDOW) /* fill 5 other */
BIGTRAP(tt0_0f8, FILL_WINDOW) /* fill 6 other */
BIGTRAP(tt0_0fc, FILL_WINDOW) /* fill 7 other */
TRAP(tt0_100, NOT) /* software trap */
TRAP(tt0_101, NOT) /* software trap */
TRAP(tt0_102, NOT) /* software trap */
TRAP(tt0_103, NOT) /* software trap */
TRAP(tt0_104, NOT) /* software trap */
TRAP(tt0_105, NOT) /* software trap */
TRAP(tt0_106, NOT) /* software trap */
TRAP(tt0_107, NOT) /* software trap */
TRAP(tt0_108, NOT) /* software trap */
TRAP(tt0_109, NOT) /* software trap */
TRAP(tt0_10a, NOT) /* software trap */
TRAP(tt0_10b, NOT) /* software trap */
TRAP(tt0_10c, NOT) /* software trap */
TRAP(tt0_10d, NOT) /* software trap */
TRAP(tt0_10e, NOT) /* software trap */
TRAP(tt0_10f, NOT) /* software trap */
TRAP(tt0_110, NOT) /* software trap */
TRAP(tt0_111, NOT) /* software trap */
TRAP(tt0_112, NOT) /* software trap */
TRAP(tt0_113, GOTO(hprint)) /* print string */
TRAP(tt0_114, GOTO(hprintx)) /* print hex 64-bit */
TRAP(tt0_113, NOT) /* software trap */
TRAP(tt0_114, NOT) /* software trap */
TRAP(tt0_115, NOT) /* software trap */
TRAP(tt0_116, NOT) /* software trap */
TRAP(tt0_117, NOT) /* software trap */
TRAP(tt0_118, NOT) /* software trap */
TRAP(tt0_119, NOT) /* software trap */
TRAP(tt0_11a, NOT) /* software trap */
TRAP(tt0_11b, NOT) /* software trap */
TRAP(tt0_11c, NOT) /* software trap */
TRAP(tt0_11d, NOT) /* software trap */
TRAP(tt0_11e, NOT) /* software trap */
TRAP(tt0_11f, NOT) /* software trap */
TRAP(tt0_120, NOT) /* software trap */
TRAP(tt0_121, NOT) /* software trap */
TRAP(tt0_122, NOT) /* software trap */
TRAP(tt0_123, NOT) /* software trap */
TRAP(tt0_124, NOT) /* software trap */
TRAP(tt0_125, NOT) /* software trap */
TRAP(tt0_126, NOT) /* software trap */
TRAP(tt0_127, NOT) /* software trap */
TRAP(tt0_128, NOT) /* software trap */
TRAP(tt0_129, NOT) /* software trap */
TRAP(tt0_12a, NOT) /* software trap */
TRAP(tt0_12b, NOT) /* software trap */
TRAP(tt0_12c, NOT) /* software trap */
TRAP(tt0_12d, NOT) /* software trap */
TRAP(tt0_12e, NOT) /* software trap */
TRAP(tt0_12f, NOT) /* software trap */
TRAP(tt0_130, NOT) /* software trap */
TRAP(tt0_131, NOT) /* software trap */
TRAP(tt0_132, NOT) /* software trap */
TRAP(tt0_133, NOT) /* software trap */
TRAP(tt0_134, NOT) /* software trap */
TRAP(tt0_135, NOT) /* software trap */
TRAP(tt0_136, NOT) /* software trap */
TRAP(tt0_137, NOT) /* software trap */
TRAP(tt0_138, NOT) /* software trap */
TRAP(tt0_139, NOT) /* software trap */
TRAP(tt0_13a, NOT) /* software trap */
TRAP(tt0_13b, NOT) /* software trap */
TRAP(tt0_13c, NOT) /* software trap */
TRAP(tt0_13d, NOT) /* software trap */
TRAP(tt0_13e, NOT) /* software trap */
TRAP(tt0_13f, NOT) /* software trap */
TRAP(tt0_140, NOT) /* software trap */
TRAP(tt0_141, NOT) /* software trap */
TRAP(tt0_142, NOT) /* software trap */
TRAP(tt0_143, NOT) /* software trap */
TRAP(tt0_144, NOT) /* software trap */
TRAP(tt0_145, NOT) /* software trap */
TRAP(tt0_146, NOT) /* software trap */
TRAP(tt0_147, NOT) /* software trap */
TRAP(tt0_148, NOT) /* software trap */
TRAP(tt0_149, NOT) /* software trap */
TRAP(tt0_14a, NOT) /* software trap */
TRAP(tt0_14b, NOT) /* software trap */
TRAP(tt0_14c, NOT) /* software trap */
TRAP(tt0_14d, NOT) /* software trap */
TRAP(tt0_14e, NOT) /* software trap */
TRAP(tt0_14f, NOT) /* software trap */
TRAP(tt0_150, NOT) /* software trap */
TRAP(tt0_151, NOT) /* software trap */
TRAP(tt0_152, NOT) /* software trap */
TRAP(tt0_153, NOT) /* software trap */
TRAP(tt0_154, NOT) /* software trap */
TRAP(tt0_155, NOT) /* software trap */
TRAP(tt0_156, NOT) /* software trap */
TRAP(tt0_157, NOT) /* software trap */
TRAP(tt0_158, NOT) /* software trap */
TRAP(tt0_159, NOT) /* software trap */
TRAP(tt0_15a, NOT) /* software trap */
TRAP(tt0_15b, NOT) /* software trap */
TRAP(tt0_15c, NOT) /* software trap */
TRAP(tt0_15d, NOT) /* software trap */
TRAP(tt0_15e, NOT) /* software trap */
TRAP(tt0_15f, NOT) /* software trap */
TRAP(tt0_160, NOT) /* software trap */
TRAP(tt0_161, NOT) /* software trap */
TRAP(tt0_162, NOT) /* software trap */
TRAP(tt0_163, NOT) /* software trap */
TRAP(tt0_164, NOT) /* software trap */
TRAP(tt0_165, NOT) /* software trap */
TRAP(tt0_166, NOT) /* software trap */
TRAP(tt0_167, NOT) /* software trap */
TRAP(tt0_168, NOT) /* software trap */
TRAP(tt0_169, NOT) /* software trap */
TRAP(tt0_16a, NOT) /* software trap */
TRAP(tt0_16b, NOT) /* software trap */
TRAP(tt0_16c, NOT) /* software trap */
TRAP(tt0_16d, NOT) /* software trap */
TRAP(tt0_16e, NOT) /* software trap */
TRAP(tt0_16f, NOT) /* software trap */
TRAP(tt0_170, NOT) /* software trap */
TRAP(tt0_171, NOT) /* software trap */
TRAP(tt0_172, NOT) /* software trap */
TRAP(tt0_173, NOT) /* software trap */
TRAP(tt0_174, NOT) /* software trap */
TRAP(tt0_175, NOT) /* software trap */
TRAP(tt0_176, NOT) /* software trap */
TRAP(tt0_177, NOT) /* software trap */
TRAP(tt0_178, NOT) /* software trap */
TRAP(tt0_179, NOT) /* software trap */
TRAP(tt0_17a, NOT) /* software trap */
TRAP(tt0_17b, NOT) /* software trap */
TRAP(tt0_17c, NOT) /* software trap */
TRAP(tt0_17d, NOT) /* software trap */
TRAP(tt0_17e, NOT) /* software trap */
TRAP(tt0_17f, NOT) /* software trap */
TRAP(tt0_180, GOTO(hcall)) /* hypervisor software trap */
TRAP(tt0_181, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_182, HCALL_BAD) /* hypervisor software trap */
TRAP_NOALIGN(tt0_183, HCALL(MMU_MAP_ADDR_IDX)) /* hyperfast trap */
TRAP_NOALIGN(tt0_184, HCALL(MMU_UNMAP_ADDR_IDX)) /* hyperfast trap */
TRAP_NOALIGN(tt0_185, HCALL(TTRACE_ADDENTRY_IDX)) /* hyperfast trap */
TRAP(tt0_186, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_187, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_188, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_189, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18a, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18b, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18c, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18d, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18e, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_18f, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_190, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_191, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_192, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_193, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_194, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_195, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_196, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_197, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_198, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_199, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19a, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19b, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19c, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19d, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19e, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_19f, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1a9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1aa, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ab, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ac, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ad, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ae, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1af, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1b9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ba, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1bb, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1bc, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1bd, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1be, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1bf, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1c9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ca, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1cb, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1cc, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1cd, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ce, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1cf, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1d9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1da, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1db, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1dc, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1dd, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1de, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1df, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1e9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ea, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1eb, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ec, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ed, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ee, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ef, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f0, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f1, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f2, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f3, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f4, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f5, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f6, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f7, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f8, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1f9, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1fa, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1fb, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1fc, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1fd, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1fe, HCALL_BAD) /* hypervisor software trap */
TRAP(tt0_1ff, GOTO(hcall_core)) /* hypervisor software trap */
* Sparc V9 TBA registers require that bits 14 through 0 must be zero.
* Ensure the trap tracing table is aligned on a TRAPTABLE_SIZE boundry.
* For additional information, refer to:
* "The SPARC Architecture Manual", Version 9,
* Section 5.2.8 "Trap Base Address (TBA)"
* There should be nothing in the .text segment between ehtraptable
SET_SIZE(htraptracetable)
* revector - revector a trap to the guest as if the guest received
* %g1 - new trap type for guest
!! %g1 tba offset to branch to in tt0
bgu,pn %xcc, watchdog_guest
sub %g3, 1, %g2 ! %g3 is either 1 or 2
!! %g2 tt1 offset for trap vector for traps at tl>0
wrhpr %g3, %hpstate ! keep ENB bit
! Save some locals so we can use them while moving around
stx %l0, [%g1 + STRAND_SCR0]
stx %l1, [%g1 + STRAND_SCR1]
stx %l2, [%g1 + STRAND_SCR2]
stx %l3, [%g1 + STRAND_SCR3]
! Save current %tl and %gl
set STRAND_FAIL_TRAPSTATE, %l1
mulx %l3, TRAPSTATE_SIZE, %l3
add %l1, %l3, %l1 ! %l1 pointer to current trapstate
1: wrpr %l2, %tl ! %l2 current tl
stx %l3, [%l1 + TRAPSTATE_HTSTATE]
stx %l3, [%l1 + TRAPSTATE_TSTATE]
stx %l3, [%l1 + TRAPSTATE_TT]
stx %l3, [%l1 + TRAPSTATE_TPC]
stx %l3, [%l1 + TRAPSTATE_TNPC]
set STRAND_FAIL_TRAPGLOBALS, %l1
mulx %l2, TRAPGLOBALS_SIZE, %l3
add %l1, %l3, %l1 ! %l1 pointer to current trapglobals
1: wrpr %l2, %gl ! %l2 current gl
dec TRAPGLOBALS_SIZE, %l1
DEBUG_SPINLOCK_ENTER(%g1, %g2, %g3)
HV_PRINT_NOTRAP("WATCHDOG: strand: ")
ldub [%l0 + STRAND_ID], %g1
HV_PRINT_NOTRAP(" vcpu: ")
ldub [%l1 + CPU_VID], %g1 /* FIXME : VCPU_ID */
HV_PRINT_NOTRAP(" trap state:\r\n");
set STRAND_FAIL_TRAPSTATE, %l1
HV_PRINT_NOTRAP(" tl: ");
HV_PRINT_NOTRAP(" tt: ");
ldx [%l1 + TRAPSTATE_TT], %g1
HV_PRINT_NOTRAP(" htstate: ");
ldx [%l1 + TRAPSTATE_HTSTATE], %g1
HV_PRINT_NOTRAP(" tstate: ");
ldx [%l1 + TRAPSTATE_TSTATE], %g1
HV_PRINT_NOTRAP("\r\n tpc: ");
ldx [%l1 + TRAPSTATE_TPC], %g1
HV_PRINT_NOTRAP(" tnpc: ");
ldx [%l1 + TRAPSTATE_TNPC], %g1
HV_PRINT_NOTRAP(" trap globals:\r\n");
set STRAND_FAIL_TRAPGLOBALS, %l1
HV_PRINT_NOTRAP(" gl: ");
HV_PRINT_NOTRAP(" %g0-%g3: ");
HV_PRINT_NOTRAP(" %g4-%g7: ");
inc TRAPGLOBALS_SIZE, %l1
HV_PRINT_NOTRAP("\r\n current window:\r\n");
HV_PRINT_NOTRAP(" %o0-%o3: ");
HV_PRINT_NOTRAP(" %o4-%o7: ");
HV_PRINT_NOTRAP("rtba: ")
ldx [%g1 + CPU_RTBA], %g1
HV_PRINT_NOTRAP("Entering infinite loop in the Hypervisor. \r\n")
brz,pt %g0, watchdog_inf_loop
ldx [%l0 + STRAND_SCR3], %l3
ldx [%l0 + STRAND_SCR2], %l2
ldx [%l0 + STRAND_SCR1], %l1
ldx [%l0 + STRAND_SCR0], %l0
set (LSUCR_DM | LSUCR_IM), %g2
andn %g1, %g2, %g1 ! disable MMU
! Get real-mode trap table base address
ldx [%g3 + CPU_RTBA], %g3
add %g3, (TT_GUEST_WATCHDOG << TT_OFFSET_SHIFT), %g3
mov %g3, %o0 ! XXX clobbering %o0
mov HPSTATE_GUEST, %g1 ! XXX clobbering %g1
wrhpr %g1, %hpstate ! set ENB bit
! General purpose trap trace routine.
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
stx %g0, [%g2 + TTRACE_ENTRY_F1]
stx %g0, [%g2 + TTRACE_ENTRY_F2]
stx %g0, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Traces instruction access exceptions.
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
stx %g4, [%g2 + TTRACE_ENTRY_F1]
stx %g0, [%g2 + TTRACE_ENTRY_F2]
stx %g0, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Traces data mmu exceptions.
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
stx %g4, [%g2 + TTRACE_ENTRY_F1]
stx %g4, [%g2 + TTRACE_ENTRY_F2]
stx %g0, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Traces hypervisor call traps.
! Records state. (See traptrace.h for details.)
! TAG = %o5, Hypervisor Call Number
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %o5, [%g2 + TTRACE_ENTRY_TAG]
stx %o0, [%g2 + TTRACE_ENTRY_F1]
stx %o1, [%g2 + TTRACE_ENTRY_F2]
stx %o2, [%g2 + TTRACE_ENTRY_F3]
stx %o3, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
stx %o0, [%g2 + TTRACE_ENTRY_F1]
stx %o1, [%g2 + TTRACE_ENTRY_F2]
stx %o2, [%g2 + TTRACE_ENTRY_F3]
stx %o3, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Traces MMU Unmap traps.
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
ENTRY_NP(ttrace_mmu_unmap)
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
stx %o0, [%g2 + TTRACE_ENTRY_F1]
stx %o1, [%g2 + TTRACE_ENTRY_F2]
stx %o2, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
SET_SIZE(ttrace_mmu_unmap)
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
ldxa [%g0]ASI_SPARC_ERR_STATUS, %g4
ldxa [%g0]ASI_SPARC_ERR_ADDR, %g5
stx %g4, [%g2 + TTRACE_ENTRY_F1]
stx %g5, [%g2 + TTRACE_ENTRY_F2]
stx %g0, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)
! Records state. (See traptrace.h for details.)
! Expects: %g7 to contain PC of trap table entry
TTRACE_PTR(%g1, %g2, 1f, 1f)
TTRACE_STATE(%g2, TTRACE_TYPE_HV, %g3, %g4)
sth %g0, [%g2 + TTRACE_ENTRY_TAG]
ldxa [%g0]ASI_SPARC_ERR_STATUS, %g4
ldxa [%g0]ASI_SPARC_ERR_ADDR, %g5
stx %g4, [%g2 + TTRACE_ENTRY_F1]
stx %g5, [%g2 + TTRACE_ENTRY_F2]
stx %g0, [%g2 + TTRACE_ENTRY_F3]
stx %g0, [%g2 + TTRACE_ENTRY_F4]
TTRACE_NEXT(%g2, %g3, %g4, %g5)