/*
- * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2012 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
#define T_NO_FPU 7 /* no floating point */
#define T_DOUBLE_FAULT 8 /* double fault */
#define T_FPU_FAULT 9
-/* 10 */
+#define T_INVALID_TSS 10
#define T_SEGMENT_NOT_PRESENT 11
#define T_STACK_FAULT 12
#define T_GENERAL_PROTECTION 13
#define T_WATCHPOINT 17
#define T_MACHINE_CHECK 18
#define T_SSE_FLOAT_ERROR 19
+/* 20-126 */
+#define T_DTRACE_RET 127
+
+/* The SYSENTER and SYSCALL trap numbers are software constructs.
+ * These exceptions are dispatched directly to the system call handlers.
+ * See also the "software interrupt codes" section of
+ * osfmk/mach/i386/syscall_sw.h
+ */
+#define T_SYSENTER 0x84
+#define T_SYSCALL 0x85
+
#define T_PREEMPT 255
#define TRAP_NAMES "divide error", "debug trap", "NMI", "breakpoint", \
"no coprocessor", "double fault", "coprocessor overrun", \
"invalid TSS", "segment not present", "stack bounds", \
"general protection", "page fault", "(reserved)", \
- "coprocessor error", "watchpoint", "(reserved)", "SSE floating point"
+ "coprocessor error", "watchpoint", "machine check", "SSE floating point"
/*
* Page-fault trap codes.
#define T_PF_EXECUTE 0x10 /* instruction fetch when NX */
#endif
-
#if !defined(ASSEMBLER) && defined(MACH_KERNEL)
#include <i386/thread.h>
extern void i386_exception(
- int exc,
- int code,
- int subcode);
+ int exc,
+ mach_exception_code_t code,
+ mach_exception_subcode_t subcode);
-extern void sync_iss_to_iks(x86_saved_state32_t *regs);
+extern void sync_iss_to_iks(x86_saved_state_t *regs);
-extern void sync_iss_to_iks_unconditionally(x86_saved_state32_t *regs);
+extern void sync_iss_to_iks_unconditionally(
+ x86_saved_state_t *regs);
-extern void kernel_trap(x86_saved_state_t *regs);
+extern void kernel_trap(x86_saved_state_t *regs, uintptr_t *lo_spp);
extern void user_trap(x86_saved_state_t *regs);
-extern void panic_double_fault(int code);
+extern void interrupt(x86_saved_state_t *regs);
extern void panic_double_fault64(x86_saved_state_t *regs);
-
-extern void panic_machine_check(int code);
-
extern void panic_machine_check64(x86_saved_state_t *regs);
extern void i386_astintr(int preemption);
typedef kern_return_t (*perfCallback)(
int trapno,
void *regs,
- int unused1,
- int unused2);
+ uintptr_t *lo_spp,
+ int);
+
+typedef kern_return_t (*perfASTCallback)(ast_t reasons, ast_t *myast);
-extern perfCallback perfTrapHook;
-extern perfCallback perfASTHook;
-extern perfCallback perfIntHook;
+extern volatile perfCallback perfTrapHook;
+extern volatile perfASTCallback perfASTHook;
+extern volatile perfCallback perfIntHook;
+extern void panic_i386_backtrace(void *, int, const char *, boolean_t, x86_saved_state_t *);
#if MACH_KDP
extern boolean_t kdp_i386_trap(
unsigned int,
- x86_saved_state32_t *,
+ x86_saved_state64_t *,
kern_return_t,
vm_offset_t);
-extern void panic_i386_backtrace(void *, int);
#endif /* MACH_KDP */
#endif /* !ASSEMBLER && MACH_KERNEL */