X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/935ed37a5c468c8a1c07408573c08b8b7ef80e8b..cc8bc92ae4a8e9f1a1ab61bf83d34ad8150b3405:/osfmk/i386/trap.h diff --git a/osfmk/i386/trap.h b/osfmk/i386/trap.h index 9ae4a8b5f..33676cf75 100644 --- a/osfmk/i386/trap.h +++ b/osfmk/i386/trap.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2012 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -84,6 +84,15 @@ #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", \ @@ -100,11 +109,8 @@ #define T_PF_WRITE 0x2 /* write access */ #define T_PF_USER 0x4 /* from user state */ -#ifdef PAE #define T_PF_RSVD 0x8 /* reserved bit set to 1 */ #define T_PF_EXECUTE 0x10 /* instruction fetch when NX */ -#endif - #if !defined(ASSEMBLER) && defined(MACH_KERNEL) @@ -115,41 +121,44 @@ extern void i386_exception( 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); 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 *); +extern void print_one_backtrace(pmap_t pmap, vm_offset_t topfp, const char *cur_marker, boolean_t is_64_bit); +extern void print_thread_num_that_crashed(task_t task); +extern void print_tasks_user_threads(task_t task); +extern void print_threads_registers(thread_t thread); +extern void print_uuid_info(task_t task); +extern void print_launchd_info(void); + #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); #endif /* MACH_KDP */