#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", \
#define T_PF_EXECUTE 0x10 /* instruction fetch when NX */
#endif
-
#if !defined(ASSEMBLER) && defined(MACH_KERNEL)
#include <i386/thread.h>
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_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);
+#ifdef __i386__
+extern void panic_double_fault32(int code);
+extern void panic_machine_check32(int code);
+#endif
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);
-extern perfCallback perfTrapHook;
-extern perfCallback perfASTHook;
-extern perfCallback perfIntHook;
+typedef kern_return_t (*perfASTCallback)(ast_t reasons, ast_t *myast);
+
+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,
+#ifdef __i386__
x86_saved_state32_t *,
+#else
+ x86_saved_state64_t *,
+#endif
kern_return_t,
vm_offset_t);
#endif /* MACH_KDP */