X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/e5568f75972dfc723778653c11cb6b4dc825716a..378393581903b274cb7a4d18e0d978071a6b592d:/osfmk/kern/exception.c diff --git a/osfmk/kern/exception.c b/osfmk/kern/exception.c index 306470b36..67abd9fbf 100644 --- a/osfmk/kern/exception.c +++ b/osfmk/kern/exception.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -58,6 +58,7 @@ #include #include #include +#include #include #include #include @@ -67,12 +68,10 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -104,6 +103,20 @@ unsigned long c_tsk_exc_raise = 0; unsigned long c_tsk_exc_raise_state = 0; unsigned long c_tsk_exc_raise_state_id = 0; +/* forward declarations */ +void exception_deliver( + exception_type_t exception, + exception_data_t code, + mach_msg_type_number_t codeCnt, + struct exception_action *excp, + mutex_t *mutex); + +#ifdef MACH_BSD +kern_return_t bsd_exception( + exception_type_t exception, + exception_data_t code, + mach_msg_type_number_t codeCnt); +#endif /* MACH_BSD */ /* * Routine: exception_deliver @@ -125,7 +138,7 @@ exception_deliver( struct exception_action *excp, mutex_t *mutex) { - thread_act_t a_self = current_act(); + thread_t self = current_thread(); ipc_port_t exc_port; int behavior; int flavor; @@ -135,7 +148,7 @@ exception_deliver( * Save work if we are terminating. * Just go back to our AST handler. */ - if (!a_self->active) + if (!self->active) thread_exception_return(); /* @@ -171,8 +184,8 @@ exception_deliver( thread_state_data_t state; c_thr_exc_raise_state++; - state_cnt = state_count[flavor]; - kr = thread_getstatus(a_self, flavor, + state_cnt = _MachineStateCount[flavor]; + kr = thread_getstatus(self, flavor, (thread_state_t)state, &state_cnt); if (kr == KERN_SUCCESS) { @@ -182,7 +195,7 @@ exception_deliver( state, state_cnt, state, &state_cnt); if (kr == MACH_MSG_SUCCESS) - kr = thread_setstatus(a_self, flavor, + kr = thread_setstatus(self, flavor, (thread_state_t)state, state_cnt); } @@ -196,8 +209,8 @@ exception_deliver( case EXCEPTION_DEFAULT: c_thr_exc_raise++; kr = exception_raise(exc_port, - retrieve_act_self_fast(a_self), - retrieve_task_self_fast(a_self->task), + retrieve_thread_self_fast(self), + retrieve_task_self_fast(self->task), exception, code, codeCnt); @@ -211,21 +224,21 @@ exception_deliver( thread_state_data_t state; c_thr_exc_raise_state_id++; - state_cnt = state_count[flavor]; - kr = thread_getstatus(a_self, flavor, + state_cnt = _MachineStateCount[flavor]; + kr = thread_getstatus(self, flavor, (thread_state_t)state, &state_cnt); if (kr == KERN_SUCCESS) { kr = exception_raise_state_identity(exc_port, - retrieve_act_self_fast(a_self), - retrieve_task_self_fast(a_self->task), + retrieve_thread_self_fast(self), + retrieve_task_self_fast(self->task), exception, code, codeCnt, &flavor, state, state_cnt, state, &state_cnt); if (kr == MACH_MSG_SUCCESS) - kr = thread_setstatus(a_self, flavor, + kr = thread_setstatus(self, flavor, (thread_state_t)state, state_cnt); } @@ -255,12 +268,12 @@ exception_deliver( * Doesn't return. */ void -exception( +exception_triage( exception_type_t exception, exception_data_t code, mach_msg_type_number_t codeCnt) { - thread_act_t thr_act; + thread_t thread; task_t task; host_priv_t host_priv; struct exception_action *excp; @@ -274,9 +287,9 @@ exception( /* * Try to raise the exception at the activation level. */ - thr_act = current_act(); - mutex = mutex_addr(thr_act->lock); - excp = &thr_act->exc_actions[exception]; + thread = current_thread(); + mutex = mutex_addr(thread->mutex); + excp = &thread->exc_actions[exception]; exception_deliver(exception, code, codeCnt, excp, mutex); /* @@ -323,10 +336,9 @@ bsd_exception( mach_msg_type_number_t codeCnt) { task_t task; - host_priv_t host_priv; struct exception_action *excp; mutex_t *mutex; - thread_act_t a_self = current_act(); + thread_t self = current_thread(); ipc_port_t exc_port; int behavior; int flavor; @@ -343,7 +355,7 @@ bsd_exception( * Save work if we are terminating. * Just go back to our AST handler. */ - if (!a_self->active) { + if (!self->active) { return(KERN_FAILURE); } @@ -380,8 +392,8 @@ bsd_exception( thread_state_data_t state; c_thr_exc_raise_state++; - state_cnt = state_count[flavor]; - kr = thread_getstatus(a_self, flavor, + state_cnt = _MachineStateCount[flavor]; + kr = thread_getstatus(self, flavor, (thread_state_t)state, &state_cnt); if (kr == KERN_SUCCESS) { @@ -391,7 +403,7 @@ bsd_exception( state, state_cnt, state, &state_cnt); if (kr == MACH_MSG_SUCCESS) - kr = thread_setstatus(a_self, flavor, + kr = thread_setstatus(self, flavor, (thread_state_t)state, state_cnt); } @@ -405,8 +417,8 @@ bsd_exception( case EXCEPTION_DEFAULT: c_thr_exc_raise++; kr = exception_raise(exc_port, - retrieve_act_self_fast(a_self), - retrieve_task_self_fast(a_self->task), + retrieve_thread_self_fast(self), + retrieve_task_self_fast(self->task), exception, code, codeCnt); @@ -419,21 +431,21 @@ bsd_exception( thread_state_data_t state; c_thr_exc_raise_state_id++; - state_cnt = state_count[flavor]; - kr = thread_getstatus(a_self, flavor, + state_cnt = _MachineStateCount[flavor]; + kr = thread_getstatus(self, flavor, (thread_state_t)state, &state_cnt); if (kr == KERN_SUCCESS) { kr = exception_raise_state_identity(exc_port, - retrieve_act_self_fast(a_self), - retrieve_task_self_fast(a_self->task), + retrieve_thread_self_fast(self), + retrieve_task_self_fast(self->task), exception, code, codeCnt, &flavor, state, state_cnt, state, &state_cnt); if (kr == MACH_MSG_SUCCESS) - kr = thread_setstatus(a_self, flavor, + kr = thread_setstatus(self, flavor, (thread_state_t)state, state_cnt); } @@ -464,12 +476,9 @@ kern_return_t sys_perf_notify(struct task *task, { host_priv_t hostp; struct exception_action *excp; - thread_act_t act = current_act(); - thread_t thr = current_thread(); + thread_t thread = current_thread(); ipc_port_t xport; kern_return_t ret; - int abrt; - spl_t ints; wait_interrupt_t wsave; hostp = host_priv_self(); /* Get the host privileged ports */ @@ -504,8 +513,8 @@ kern_return_t sys_perf_notify(struct task *task, wsave = thread_interrupt_level(THREAD_UNINT); /* Make sure we aren't aborted here */ ret = exception_raise(xport, /* Send the exception to the perf handler */ - retrieve_act_self_fast(act), /* Not always the dying guy */ - retrieve_task_self_fast(act->task), /* Not always the dying guy */ + retrieve_thread_self_fast(thread), /* Not always the dying guy */ + retrieve_task_self_fast(thread->task), /* Not always the dying guy */ EXC_RPC_ALERT, /* Unused exception type until now */ code, codeCnt); @@ -513,4 +522,3 @@ kern_return_t sys_perf_notify(struct task *task, return(ret); /* Tell caller how it went */ } -