843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Use is subject to license terms.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#pragma ident "%Z%%M% %I% %E% SMI"
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/asm_linkage.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/hypervisor.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/privregs.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/segments.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/traptrace.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/trap.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/psw.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/x86_archext.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/asm_misc.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/panic.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#if !defined(__lint)
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include "assym.h"
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#if defined(__lint)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevvoid
843e19887f64dde75055cf8842fc4db2171eff45johnlevxpv_panic_callback(void)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{}
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev/* ARGSUSED */
843e19887f64dde75055cf8842fc4db2171eff45johnlevvoid
843e19887f64dde75055cf8842fc4db2171eff45johnlevxpv_panic_setcr3(ulong_t cr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{}
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevvoid
843e19887f64dde75055cf8842fc4db2171eff45johnlevxpv_panic_reload_cr3(void)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{}
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevvoid
843e19887f64dde75055cf8842fc4db2171eff45johnlevxpv_resetgs(void)
843e19887f64dde75055cf8842fc4db2171eff45johnlev{}
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#else /* __lint */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#if defined(__amd64)
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_getcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %cr3, %rax
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_getcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_setcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rdi, %cr3
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_setcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY(xpv_panic_reload_cr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %cr3, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rdi, %cr3
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_reload_cr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_prep)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushq %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev subq $REGSIZE, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rax, REGOFF_RAX(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_RBX(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rax
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $REGSIZE, %rax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq (%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_RBP(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq 8(%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_TRAPNO(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq 16(%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_ERR(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq 24(%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_RIP(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq 32(%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_CS(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq 40(%rax), %rbx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rbx, REGOFF_RFL(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $56, %rax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rax, REGOFF_RSP(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev xorl %eax, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %gs, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %rax, REGOFF_GS(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %fs, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %rax, REGOFF_FS(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %es, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %rax, REGOFF_ES(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %ds, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %rax, REGOFF_DS(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %ss, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %rax, REGOFF_SS(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rcx, REGOFF_RCX(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rdx, REGOFF_RDX(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rdi, REGOFF_RDI(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsi, REGOFF_RSI(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r8, REGOFF_R8(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r9, REGOFF_R9(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r10, REGOFF_R10(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r11, REGOFF_R11(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r12, REGOFF_R12(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r13, REGOFF_R13(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r14, REGOFF_R14(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %r15, REGOFF_R15(%rsp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_die
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_prep)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Switch to the Solaris panic stack and jump into the Xen panic
843e19887f64dde75055cf8842fc4db2171eff45johnlev * handling code.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_hdlr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev leaq panic_stack(%rip), %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $PANICSTKSIZE, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_do_panic
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_hdlr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_surprise_intr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushq %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev subq $REGOFF_TRAPNO, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev __SAVE_REGS
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $REGOFF_TRAPNO, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_interrupt
843e19887f64dde75055cf8842fc4db2171eff45johnlev __RESTORE_REGS
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $REGOFF_TRAPNO, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev popq %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev iretq
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_surprise_intr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_timer_trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushq %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev subq $REGOFF_TRAPNO, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev __SAVE_REGS
843e19887f64dde75055cf8842fc4db2171eff45johnlev movq %rsp, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $REGOFF_TRAPNO, %rdi
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_timer_tick
843e19887f64dde75055cf8842fc4db2171eff45johnlev __RESTORE_REGS
843e19887f64dde75055cf8842fc4db2171eff45johnlev addq $REGOFF_TRAPNO, %rsp
843e19887f64dde75055cf8842fc4db2171eff45johnlev popq %rbp
843e19887f64dde75055cf8842fc4db2171eff45johnlev iretq
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_timer_trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#elif defined(__i386)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_setcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, %cr3
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_setcr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY(xpv_panic_reload_cr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %cr3, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, %cr3
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_reload_cr3)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Stack on entry:
843e19887f64dde75055cf8842fc4db2171eff45johnlev * +------------+
843e19887f64dde75055cf8842fc4db2171eff45johnlev * | EFLAGS |
843e19887f64dde75055cf8842fc4db2171eff45johnlev * | CS |
843e19887f64dde75055cf8842fc4db2171eff45johnlev * | EIP |
843e19887f64dde75055cf8842fc4db2171eff45johnlev * | Error |
843e19887f64dde75055cf8842fc4db2171eff45johnlev * | Trap | <---- %esp
843e19887f64dde75055cf8842fc4db2171eff45johnlev * +------------+
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_prep)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %esp, %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev subl $REGSIZE, %esp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, REGOFF_EAX(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_EBX(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %esp, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev addl $REGSIZE, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl (%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_EBP(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_TRAPNO(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 8(%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_ERR(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 12(%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_EIP(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 16(%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_CS(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 20(%eax), %ebx
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ebx, REGOFF_EFL(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev addl $28, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %eax, REGOFF_ESP(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev xorl %eax, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %gs, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %eax, REGOFF_GS(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %fs, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %eax, REGOFF_FS(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %es, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %eax, REGOFF_ES(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %ds, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %eax, REGOFF_DS(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %ss, %ax
843e19887f64dde75055cf8842fc4db2171eff45johnlev mov %eax, REGOFF_SS(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %ecx, REGOFF_ECX(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %edx, REGOFF_EDX(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %edi, REGOFF_EDI(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %esi, REGOFF_ESI(%esp)
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %esp
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_die
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_prep)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev /*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Switch to the Solaris panic stack and jump into the Xen panic
843e19887f64dde75055cf8842fc4db2171eff45johnlev * handling code.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_hdlr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl 4(%esp), %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev lea panic_stack, %esp
843e19887f64dde75055cf8842fc4db2171eff45johnlev add $PANICSTKSIZE, %esp
843e19887f64dde75055cf8842fc4db2171eff45johnlev pushl %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_do_panic
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_hdlr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_surprise_intr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %esp, %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev pusha
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_interrupt
843e19887f64dde75055cf8842fc4db2171eff45johnlev popa
843e19887f64dde75055cf8842fc4db2171eff45johnlev pop %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev iret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_surprise_intr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_timer_trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl %esp, %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev pusha
843e19887f64dde75055cf8842fc4db2171eff45johnlev call xpv_timer_tick
843e19887f64dde75055cf8842fc4db2171eff45johnlev popa
843e19887f64dde75055cf8842fc4db2171eff45johnlev pop %ebp
843e19887f64dde75055cf8842fc4db2171eff45johnlev iret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_timer_trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif /* __i386 */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_sti)
843e19887f64dde75055cf8842fc4db2171eff45johnlev sti
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_sti)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_halt)
843e19887f64dde75055cf8842fc4db2171eff45johnlev sti
843e19887f64dde75055cf8842fc4db2171eff45johnlev hlt
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_halt)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_panic_resetgs)
843e19887f64dde75055cf8842fc4db2171eff45johnlev movl $KGS_SEL, %eax
843e19887f64dde75055cf8842fc4db2171eff45johnlev movw %ax, %gs
843e19887f64dde75055cf8842fc4db2171eff45johnlev ret
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_panic_resetgs)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_invaltrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0xbad0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0x0bad
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_invaltrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_div0trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_ZERODIV
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_div0trap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_dbgtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_SGLSTP
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_dbgtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_nmiint)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_NMIFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_nmiint)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_brktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev /* XXX: check for error */
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_BPTFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_brktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_ovflotrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_OVFLW
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_ovflotrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_boundstrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_BOUNDFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_boundstrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_invoptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_ILLINST
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_invoptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_ndptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_NOEXTFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_ndptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_syserrtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev /* XXX: check for error */
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_DBLFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_syserrtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_invtsstrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_TSSFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_invtsstrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_segnptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_SEGFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_segnptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_stktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_STKFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_stktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_gptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_GPFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_gptrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_pftrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_PGFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_pftrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_ndperr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_EXTERRFLT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_ndperr)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_achktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_ALIGNMENT
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_achktrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_mcetrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_MCE
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_mcetrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev ENTRY_NP(xpv_xmtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $0
843e19887f64dde75055cf8842fc4db2171eff45johnlev push $T_SIMDFPE
843e19887f64dde75055cf8842fc4db2171eff45johnlev jmp xpv_panic_prep
843e19887f64dde75055cf8842fc4db2171eff45johnlev SET_SIZE(xpv_xmtrap)
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif /* __lint */