* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* unlawful or unlicensed copies of an Apple operating system, or to
* circumvent, violate, or enable the circumvention or violation of, any
* terms of an Apple operating system software license agreement.
* unlawful or unlicensed copies of an Apple operating system, or to
* circumvent, violate, or enable the circumvention or violation of, any
* terms of an Apple operating system software license agreement.
* Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this file.
* Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this file.
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
* Mach Operating System
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
* All Rights Reserved.
* Mach Operating System
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
* All Rights Reserved.
* Permission to use, copy, modify and distribute this software and its
* documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
* Permission to use, copy, modify and distribute this software and its
* documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
* any improvements or extensions that they make and grant Carnegie Mellon
* the rights to redistribute these changes.
*/
* any improvements or extensions that they make and grant Carnegie Mellon
* the rights to redistribute these changes.
*/
for (i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT; i++) {
mac_exc_associate_action_label(&task->exc_actions[i], mac_exc_create_label());
}
#endif
for (i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT; i++) {
mac_exc_associate_action_label(&task->exc_actions[i], mac_exc_create_label());
}
#endif
kr = host_get_host_port(host_priv_self(), &port);
assert(kr == KERN_SUCCESS);
task->itk_host = port;
kr = host_get_host_port(host_priv_self(), &port);
assert(kr == KERN_SUCCESS);
task->itk_host = port;
- task->exc_actions[i].port =
- ipc_port_copy_send(parent->exc_actions[i].port);
- task->exc_actions[i].flavor =
- parent->exc_actions[i].flavor;
- task->exc_actions[i].behavior =
- parent->exc_actions[i].behavior;
- task->exc_actions[i].privileged =
- parent->exc_actions[i].privileged;
+ task->exc_actions[i].port =
+ ipc_port_copy_send(parent->exc_actions[i].port);
+ task->exc_actions[i].flavor =
+ parent->exc_actions[i].flavor;
+ task->exc_actions[i].behavior =
+ parent->exc_actions[i].behavior;
+ task->exc_actions[i].privileged =
+ parent->exc_actions[i].privileged;
*
* There are still outstanding suspensions on this task,
* even as it is being torn down. Disconnect the task
*
* There are still outstanding suspensions on this task,
* even as it is being torn down. Disconnect the task
* itself will go away only when the last suspension holder
* destroys his SO right to it -- when he either
* exits, or tries to actually use that last SO right to
* itself will go away only when the last suspension holder
* destroys his SO right to it -- when he either
* exits, or tries to actually use that last SO right to
/* destroy the kernel ports */
ipc_port_dealloc_kernel(kport);
ipc_port_dealloc_kernel(nport);
/* destroy the kernel ports */
ipc_port_dealloc_kernel(kport);
ipc_port_dealloc_kernel(nport);
/* Fresh label to unset credentials in existing labels. */
struct label *unset_label = mac_exc_create_label();
#endif
/* Fresh label to unset credentials in existing labels. */
struct label *unset_label = mac_exc_create_label();
#endif
-
- new_kport = ipc_port_alloc_kernel();
- if (new_kport == IP_NULL)
- panic("ipc_task_reset");
+
+ new_kport = ipc_kobject_alloc_port((ipc_kobject_t)task, IKOT_TASK,
+ IPC_KOBJECT_ALLOC_MAKE_SEND);
if (IP_VALID(task->itk_debug_control)) {
ipc_port_release_send(task->itk_debug_control);
}
task->itk_debug_control = IP_NULL;
if (IP_VALID(task->itk_debug_control)) {
ipc_port_release_send(task->itk_debug_control);
}
task->itk_debug_control = IP_NULL;
- kport = ipc_port_alloc_kernel();
- if (kport == IP_NULL)
- panic("ipc_thread_init");
+ kport = ipc_kobject_alloc_port((ipc_kobject_t)thread, IKOT_THREAD,
+ IPC_KOBJECT_ALLOC_MAKE_SEND);
- kfree(thread->exc_actions,
- sizeof(struct exception_action) * EXC_TYPES_COUNT);
+ kfree(thread->exc_actions,
+ sizeof(struct exception_action) * EXC_TYPES_COUNT);
thread->ith_sself = thread->ith_self = IP_NULL;
if (thread->exc_actions != NULL) {
for (i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT; ++i) {
thread->ith_sself = thread->ith_self = IP_NULL;
if (thread->exc_actions != NULL) {
for (i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT; ++i) {
* to be reset. Its RPC reply port cannot have any
* rights outstanding, so it should be fine.
* Conditions:
* to be reset. Its RPC reply port cannot have any
* rights outstanding, so it should be fine.
* Conditions:
{
ipc_port_t old_kport, new_kport;
ipc_port_t old_sself;
ipc_port_t old_exc_actions[EXC_TYPES_COUNT];
{
ipc_port_t old_kport, new_kport;
ipc_port_t old_sself;
ipc_port_t old_exc_actions[EXC_TYPES_COUNT];
-
- new_kport = ipc_port_alloc_kernel();
- if (new_kport == IP_NULL)
- panic("ipc_task_reset");
+
+ new_kport = ipc_kobject_alloc_port((ipc_kobject_t)thread, IKOT_THREAD,
+ IPC_KOBJECT_ALLOC_MAKE_SEND);
if (old_kport == IP_NULL && thread->inspection == FALSE) {
/* the is already terminated (can this happen?) */
thread_mtx_unlock(thread);
if (old_kport == IP_NULL && thread->inspection == FALSE) {
/* the is already terminated (can this happen?) */
thread_mtx_unlock(thread);
if (old_kport != IP_NULL) {
ipc_kobject_set(old_kport, IKO_NULL, IKOT_NONE);
}
if (old_kport != IP_NULL) {
ipc_kobject_set(old_kport, IKO_NULL, IKOT_NONE);
}
mac_exc_update_action_label(thread->exc_actions + i, new_label);
#endif
old_exc_actions[i] = thread->exc_actions[i].port;
mac_exc_update_action_label(thread->exc_actions + i, new_label);
#endif
old_exc_actions[i] = thread->exc_actions[i].port;
sright = retrieve_thread_self_fast(thread);
name = ipc_port_copyout_send(sright, task->itk_space);
return name;
sright = retrieve_thread_self_fast(thread);
name = ipc_port_copyout_send(sright, task->itk_space);
return name;
- kr = ipc_port_alloc(current_task()->itk_space, &name, &port);
- if (kr == KERN_SUCCESS)
+ kr = ipc_port_alloc(current_task()->itk_space, IPC_PORT_INIT_MESSAGE_QUEUE,
+ &name, &port);
+ if (kr == KERN_SUCCESS) {
- kr = ipc_port_alloc(current_task()->itk_space, &name, &port);
+ kr = ipc_port_alloc(current_task()->itk_space, flags, &name, &port);
- send_name = ipc_port_copyout_name_send(port, current_task()->itk_space, name);
- /*
- * If insertion of send right failed, userland is doing something bad, error out.
- * The space was marked inactive or the receive right just inserted above at the
- * given name was moved, in either case do not try to deallocate the receive right.
- */
- if (send_name == MACH_PORT_NULL || send_name == MACH_PORT_DEAD) {
- if (IP_VALID(thread->ith_special_reply_port)) {
- ipc_port_unbind_special_reply_port(thread, TRUE);
- }
- name = MACH_PORT_NULL;
- }
thread->ith_special_reply_port = NULL;
ipc_port_adjust_special_reply_port_locked(special_reply_port, NULL,
thread->ith_special_reply_port = NULL;
ipc_port_adjust_special_reply_port_locked(special_reply_port, NULL,
- kern_return_t result = KERN_SUCCESS;
- ipc_port_t *whichp, old = IP_NULL;
+ kern_return_t result = KERN_SUCCESS;
+ ipc_port_t *whichp, old = IP_NULL;
* KERN_INVALID_ARGUMENT The task is null.
* KERN_FAILURE The task/space is dead.
* KERN_INVALID_ARGUMENT Invalid special port.
* KERN_INVALID_ARGUMENT The task is null.
* KERN_FAILURE The task/space is dead.
* KERN_INVALID_ARGUMENT Invalid special port.
- task_t task,
- mach_port_array_t memory,
- mach_msg_type_number_t portsCnt)
+ task_t task,
+ mach_port_array_t memory,
+ mach_msg_type_number_t portsCnt)
{
ipc_port_t ports[TASK_PORT_REGISTER_MAX];
unsigned int i;
if ((task == TASK_NULL) ||
(portsCnt > TASK_PORT_REGISTER_MAX) ||
{
ipc_port_t ports[TASK_PORT_REGISTER_MAX];
unsigned int i;
if ((task == TASK_NULL) ||
(portsCnt > TASK_PORT_REGISTER_MAX) ||
/*
* Now that the operation is known to be successful,
* we can free the memory.
*/
/*
* Now that the operation is known to be successful,
* we can free the memory.
*/
- task_t task,
- mach_port_array_t *portsp,
- mach_msg_type_number_t *portsCnt)
+ task_t task,
+ mach_port_array_t *portsp,
+ mach_msg_type_number_t *portsCnt)
-
-/*
- * Routine: convert_port_to_task
- * Purpose:
- * Convert from a port to a task.
- * Doesn't consume the port ref; produces a task ref,
- * which may be null.
- * Conditions:
- * Nothing locked.
- */
-task_t
-convert_port_to_task(
- ipc_port_t port)
+static task_t
+convert_port_to_task_locked(
+ ipc_port_t port,
+ uint32_t *exec_token)
- return convert_port_to_task_with_exec_token(port, NULL);
+ task_t task = TASK_NULL;
+
+ ip_lock_held(port);
+ require_ip_active(port);
+
+ if (ip_kotype(port) == IKOT_TASK) {
+ task_t ct = current_task();
+ task = (task_t)port->ip_kobject;
+ assert(task != TASK_NULL);
+
+ if (task_conversion_eval(ct, task)) {
+ return TASK_NULL;
+ }
+
+ if (exec_token) {
+ *exec_token = task->exec_token;
+ }
+ task_reference_internal(task);
+ }
+
+ return task;
-
- if ( ip_active(port) &&
- ip_kotype(port) == IKOT_TASK ) {
- task_t ct = current_task();
- task = (task_t)port->ip_kobject;
- assert(task != TASK_NULL);
-
- if (task_conversion_eval(ct, task)) {
- ip_unlock(port);
- return TASK_NULL;
- }
-
- if (exec_token) {
- *exec_token = task->exec_token;
- }
- task_reference_internal(task);
+ if (ip_active(port)) {
+ task = convert_port_to_task_locked(port, exec_token);
+/*
+ * Routine: convert_port_to_task
+ * Purpose:
+ * Convert from a port to a task.
+ * Doesn't consume the port ref; produces a task ref,
+ * which may be null.
+ * Conditions:
+ * Nothing locked.
+ */
+task_t
+convert_port_to_task(
+ ipc_port_t port)
+{
+ return convert_port_to_task_with_exec_token(port, NULL);
+}
+
+
- if ( ip_active(port) &&
- (ip_kotype(port) == IKOT_TASK ||
- ip_kotype(port) == IKOT_TASK_NAME)) {
+ if (ip_active(port) &&
+ (ip_kotype(port) == IKOT_TASK ||
+ ip_kotype(port) == IKOT_TASK_NAME)) {
+ return task;
+}
+
+static task_inspect_t
+convert_port_to_task_inspect_locked(
+ ipc_port_t port)
+{
+ task_inspect_t task = TASK_INSPECT_NULL;
+
+ ip_lock_held(port);
+ require_ip_active(port);
+
+ if (ip_kotype(port) == IKOT_TASK) {
+ task = (task_inspect_t)port->ip_kobject;
+ assert(task != TASK_INSPECT_NULL);
+
+ task_reference_internal(task);
+ }
+
+ return task;
-
- if (ip_active(port) &&
- ip_kotype(port) == IKOT_TASK) {
- task = (task_inspect_t)port->ip_kobject;
- assert(task != TASK_INSPECT_NULL);
-
- task_reference_internal(task);
+ if (ip_active(port)) {
+ task = convert_port_to_task_inspect_locked(port);
- if (ip_active(port) &&
- ip_kotype(port) == IKOT_THREAD) {
- thread = (thread_t)port->ip_kobject;
- assert(thread != THREAD_NULL);
+ if (ip_kotype(port) == IKOT_THREAD) {
+ thread = (thread_t)port->ip_kobject;
+ assert(thread != THREAD_NULL);
/* Use task conversion rules for thread control conversions */
if (task_conversion_eval(current_task(), thread->task) != KERN_SUCCESS) {
/* Use task conversion rules for thread control conversions */
if (task_conversion_eval(current_task(), thread->task) != KERN_SUCCESS) {
- if (ipc_object_copyin(current_space(), name,
- MACH_MSG_TYPE_COPY_SEND,
- (ipc_object_t *)&kport) != KERN_SUCCESS)
- return (THREAD_NULL);
-
- thread = convert_port_to_thread(kport);
-
- if (IP_VALID(kport))
- ipc_port_release_send(kport);
+ kr = ipc_port_translate_send(current_space(), name, &kport);
+ if (kr == KERN_SUCCESS) {
+ thread = convert_port_to_thread_locked(kport, options);
+ ip_unlock(kport);
+ }
- kr = ipc_object_copyin(current_space(), name,
- MACH_MSG_TYPE_COPY_SEND,
- (ipc_object_t *) &kern_port);
- if (kr != KERN_SUCCESS)
- return TASK_NULL;
-
- task = convert_port_to_task(kern_port);
-
- if (IP_VALID(kern_port))
- ipc_port_release_send(kern_port);
+ kr = ipc_port_translate_send(current_space(), name, &kport);
+ if (kr == KERN_SUCCESS) {
+ task = convert_port_to_task_locked(kport, NULL);
+ ip_unlock(kport);
+ }
- kr = ipc_object_copyin(current_space(), name,
- MACH_MSG_TYPE_COPY_SEND,
- (ipc_object_t *)&kern_port);
- if (kr != KERN_SUCCESS)
- return TASK_NULL;
-
- ti = convert_port_to_task_inspect(kern_port);
-
- if (IP_VALID(kern_port))
- ipc_port_release_send(kern_port);
+ kr = ipc_port_translate_send(current_space(), name, &kport);
+ if (kr == KERN_SUCCESS) {
+ ti = convert_port_to_task_inspect_locked(kport);
+ ip_unlock(kport);
+ }
* Purpose:
* Convert from a task suspension token to a port.
* Consumes a task suspension token ref; produces a naked send-once right
* Purpose:
* Convert from a task suspension token to a port.
* Consumes a task suspension token ref; produces a naked send-once right
- task->itk_resume = ipc_port_alloc_kernel();
- if (!IP_VALID(task->itk_resume)) {
- panic("failed to create resume port");
- }
-
- ipc_kobject_set(task->itk_resume, (ipc_kobject_t) task, IKOT_TASK_RESUME);
+ task->itk_resume = ipc_kobject_alloc_port((ipc_kobject_t) task,
+ IKOT_TASK_RESUME, IPC_KOBJECT_ALLOC_NONE);
- thread_t thread,
- exception_mask_t exception_mask,
- ipc_port_t new_port,
- exception_behavior_t new_behavior,
- thread_state_flavor_t new_flavor)
+ thread_t thread,
+ exception_mask_t exception_mask,
+ ipc_port_t new_port,
+ exception_behavior_t new_behavior,
+ thread_state_flavor_t new_flavor)
* Check the validity of the thread_state_flavor by calling the
* VALID_THREAD_STATE_FLAVOR architecture dependent macro defined in
* osfmk/mach/ARCHITECTURE/thread_status.h
*/
* Check the validity of the thread_state_flavor by calling the
* VALID_THREAD_STATE_FLAVOR architecture dependent macro defined in
* osfmk/mach/ARCHITECTURE/thread_status.h
*/
old_port[i] = thread->exc_actions[i].port;
thread->exc_actions[i].port = ipc_port_copy_send(new_port);
thread->exc_actions[i].behavior = new_behavior;
thread->exc_actions[i].flavor = new_flavor;
thread->exc_actions[i].privileged = privileged;
old_port[i] = thread->exc_actions[i].port;
thread->exc_actions[i].port = ipc_port_copy_send(new_port);
thread->exc_actions[i].behavior = new_behavior;
thread->exc_actions[i].flavor = new_flavor;
thread->exc_actions[i].privileged = privileged;
- task_t task,
- exception_mask_t exception_mask,
- ipc_port_t new_port,
- exception_behavior_t new_behavior,
- thread_state_flavor_t new_flavor)
+ task_t task,
+ exception_mask_t exception_mask,
+ ipc_port_t new_port,
+ exception_behavior_t new_behavior,
+ thread_state_flavor_t new_flavor)
* VALID_THREAD_STATE_FLAVOR architecture dependent macro defined in
* osfmk/mach/ARCHITECTURE/thread_status.h
*/
* VALID_THREAD_STATE_FLAVOR architecture dependent macro defined in
* osfmk/mach/ARCHITECTURE/thread_status.h
*/
task->exc_actions[i].behavior = new_behavior;
task->exc_actions[i].flavor = new_flavor;
task->exc_actions[i].privileged = privileged;
task->exc_actions[i].behavior = new_behavior;
task->exc_actions[i].flavor = new_flavor;
task->exc_actions[i].privileged = privileged;
- thread_t thread,
- exception_mask_t exception_mask,
- ipc_port_t new_port,
- exception_behavior_t new_behavior,
- thread_state_flavor_t new_flavor,
- exception_mask_array_t masks,
- mach_msg_type_number_t *CountCnt,
- exception_port_array_t ports,
- exception_behavior_array_t behaviors,
- thread_state_flavor_array_t flavors)
+ thread_t thread,
+ exception_mask_t exception_mask,
+ ipc_port_t new_port,
+ exception_behavior_t new_behavior,
+ thread_state_flavor_t new_flavor,
+ exception_mask_array_t masks,
+ mach_msg_type_number_t *CountCnt,
+ exception_port_array_t ports,
+ exception_behavior_array_t behaviors,
+ thread_state_flavor_array_t flavors)
for (count = 0, i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT && count < *CountCnt; ++i) {
if ((exception_mask & (1 << i))
#if CONFIG_MACF
for (count = 0, i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT && count < *CountCnt; ++i) {
if ((exception_mask & (1 << i))
#if CONFIG_MACF
for (j = 0; j < count; ++j) {
/*
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
for (j = 0; j < count; ++j) {
/*
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
- if ( thread->exc_actions[i].port == ports[j] &&
- thread->exc_actions[i].behavior == behaviors[j] &&
- thread->exc_actions[i].flavor == flavors[j] ) {
+ if (thread->exc_actions[i].port == ports[j] &&
+ thread->exc_actions[i].behavior == behaviors[j] &&
+ thread->exc_actions[i].flavor == flavors[j]) {
thread->exc_actions[i].behavior = new_behavior;
thread->exc_actions[i].flavor = new_flavor;
thread->exc_actions[i].privileged = privileged;
thread->exc_actions[i].behavior = new_behavior;
thread->exc_actions[i].flavor = new_flavor;
thread->exc_actions[i].privileged = privileged;
- task_t task,
- exception_mask_t exception_mask,
- ipc_port_t new_port,
- exception_behavior_t new_behavior,
- thread_state_flavor_t new_flavor,
- exception_mask_array_t masks,
- mach_msg_type_number_t *CountCnt,
- exception_port_array_t ports,
- exception_behavior_array_t behaviors,
- thread_state_flavor_array_t flavors)
+ task_t task,
+ exception_mask_t exception_mask,
+ ipc_port_t new_port,
+ exception_behavior_t new_behavior,
+ thread_state_flavor_t new_flavor,
+ exception_mask_array_t masks,
+ mach_msg_type_number_t *CountCnt,
+ exception_port_array_t ports,
+ exception_behavior_array_t behaviors,
+ thread_state_flavor_array_t flavors)
}
assert(EXC_TYPES_COUNT > FIRST_EXCEPTION);
for (count = 0, i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT && count < *CountCnt; ++i) {
if ((exception_mask & (1 << i))
#if CONFIG_MACF
}
assert(EXC_TYPES_COUNT > FIRST_EXCEPTION);
for (count = 0, i = FIRST_EXCEPTION; i < EXC_TYPES_COUNT && count < *CountCnt; ++i) {
if ((exception_mask & (1 << i))
#if CONFIG_MACF
for (j = 0; j < count; j++) {
/*
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
for (j = 0; j < count; j++) {
/*
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
- if ( task->exc_actions[i].port == ports[j] &&
- task->exc_actions[i].behavior == behaviors[j] &&
- task->exc_actions[i].flavor == flavors[j] ) {
+ if (task->exc_actions[i].port == ports[j] &&
+ task->exc_actions[i].behavior == behaviors[j] &&
+ task->exc_actions[i].flavor == flavors[j]) {
task->exc_actions[i].behavior = new_behavior;
task->exc_actions[i].flavor = new_flavor;
task->exc_actions[i].privileged = privileged;
task->exc_actions[i].behavior = new_behavior;
task->exc_actions[i].flavor = new_flavor;
task->exc_actions[i].privileged = privileged;
- thread_t thread,
- exception_mask_t exception_mask,
- exception_mask_array_t masks,
- mach_msg_type_number_t *CountCnt,
- exception_port_array_t ports,
- exception_behavior_array_t behaviors,
- thread_state_flavor_array_t flavors)
+ thread_t thread,
+ exception_mask_t exception_mask,
+ exception_mask_array_t masks,
+ mach_msg_type_number_t *CountCnt,
+ exception_port_array_t ports,
+ exception_behavior_array_t behaviors,
+ thread_state_flavor_array_t flavors)
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
- if ( thread->exc_actions[i].port == ports[j] &&
- thread->exc_actions[i].behavior ==behaviors[j] &&
- thread->exc_actions[i].flavor == flavors[j] ) {
+ if (thread->exc_actions[i].port == ports[j] &&
+ thread->exc_actions[i].behavior == behaviors[j] &&
+ thread->exc_actions[i].flavor == flavors[j]) {
- task_t task,
- exception_mask_t exception_mask,
- exception_mask_array_t masks,
- mach_msg_type_number_t *CountCnt,
- exception_port_array_t ports,
- exception_behavior_array_t behaviors,
- thread_state_flavor_array_t flavors)
+ task_t task,
+ exception_mask_t exception_mask,
+ exception_mask_array_t masks,
+ mach_msg_type_number_t *CountCnt,
+ exception_port_array_t ports,
+ exception_behavior_array_t behaviors,
+ thread_state_flavor_array_t flavors)
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
* search for an identical entry, if found
* set corresponding mask for this exception.
*/
- if ( task->exc_actions[i].port == ports[j] &&
- task->exc_actions[i].behavior == behaviors[j] &&
- task->exc_actions[i].flavor == flavors[j] ) {
+ if (task->exc_actions[i].port == ports[j] &&
+ task->exc_actions[i].behavior == behaviors[j] &&
+ task->exc_actions[i].flavor == flavors[j]) {