/* * Initialize all of the debugging state in a port. * Insert the port into a global list of all allocated ports. */ void ipc_port_init_debug( ipc_port_t port) { unsigned int i; port->ip_thread = current_thread(); port->ip_timetrack = port_timestamp++; for (i = 0; i < IP_CALLSTACK_MAX; ++i) port->ip_callstack[i] = 0; for (i = 0; i < IP_NSPARES; ++i) port->ip_spares[i] = 0; /* * Machine-dependent routine to fill in an * array with up to IP_CALLSTACK_MAX levels * of return pc information. */ machine_callstack(&port->ip_callstack[0], IP_CALLSTACK_MAX); #if 0 lck_mtx_lock(&port_alloc_queue_lock); ++port_count; if (port_count_warning > 0 && port_count >= port_count_warning) assert(port_count < port_count_warning); queue_enter(&port_alloc_queue, port, ipc_port_t, ip_port_links); lck_mtx_unlock(&port_alloc_queue_lock); #endif }
/* * Routine: ipc_port_callstack_init_debug * Purpose: * Calls the machine-dependent routine to * fill in an array with up to IP_CALLSTACK_MAX * levels of return pc information * Conditions: * May block (via copyin) */ void ipc_port_callstack_init_debug( uintptr_t *callstack, unsigned int callstack_max) { unsigned int i; /* guarantee the callstack is initialized */ for (i=0; i < callstack_max; i++) callstack[i] = 0; if (ipc_portbt) machine_callstack(callstack, callstack_max); }