X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/43866e378188c25dd1e2208016ab3cbeb086ae6c..8f6c56a50524aa785f7e596d52dddfb331e18961:/osfmk/ddb/db_print.c diff --git a/osfmk/ddb/db_print.c b/osfmk/ddb/db_print.c index bbb0fb10f..0b18d8cd7 100644 --- a/osfmk/ddb/db_print.c +++ b/osfmk/ddb/db_print.c @@ -1,16 +1,19 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2004 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ - * - * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * * 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 - * compliance with the License. Please obtain a copy of the License at - * http://www.opensource.apple.com/apsl/ and read it before using this - * file. + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * 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. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER @@ -20,7 +23,7 @@ * Please see the License for the specific language governing rights and * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* * @OSF_COPYRIGHT@ @@ -66,7 +69,6 @@ #include #include #include -#include #include #include #include @@ -93,11 +95,11 @@ */ char *db_act_stat( - register thread_act_t thr_act, + register thread_t thr_act, char *status); char *db_act_swap_stat( - register thread_act_t thr_act, + register thread_t thr_act, char *status); void db_print_task( @@ -116,12 +118,12 @@ void db_print_one_entry( ipc_space_t space); int db_port_iterate( - thread_act_t thr_act, + thread_t thr_act, boolean_t is_pset, boolean_t do_output); ipc_port_t db_lookup_port( - thread_act_t thr_act, + thread_t thr_act, int id); static void db_print_port_id( @@ -131,7 +133,7 @@ static void db_print_port_id( int n); void db_print_act( - thread_act_t thr_act, + thread_t thr_act, int act_id, int flag); @@ -165,15 +167,15 @@ db_show_regs( task_t task = TASK_NULL; aux_param.modif = modif; - aux_param.thr_act = THR_ACT_NULL; + aux_param.thr_act = THREAD_NULL; if (db_option(modif, 't')) { if (have_addr) { - if (!db_check_act_address_valid((thread_act_t)addr)) + if (!db_check_act_address_valid((thread_t)addr)) return; - aux_param.thr_act = (thread_act_t)addr; + aux_param.thr_act = (thread_t)addr; } else aux_param.thr_act = db_default_act; - if (aux_param.thr_act != THR_ACT_NULL) + if (aux_param.thr_act != THREAD_NULL) task = aux_param.thr_act->task; } for (regp = db_regs; regp < db_eregs; regp++) { @@ -190,13 +192,13 @@ db_show_regs( 12-strlen(regp->name)-((i<10)?1:2), ""); else db_printf("%-12s", regp->name); - db_printf("%#*N", 2+2*sizeof(vm_offset_t), value); + db_printf("%#*llN", 2+2*sizeof(db_expr_t), (unsigned long long)value); db_find_xtrn_task_sym_and_offset((db_addr_t)value, &name, &offset, task); if (name != 0 && offset <= db_maxoff && offset != value) { db_printf("\t%s", name); if (offset != 0) - db_printf("+%#r", offset); + db_printf("+%#llr", (unsigned long long)offset); } db_printf("\n"); } @@ -220,7 +222,7 @@ db_show_regs( char * db_act_stat( - register thread_act_t thr_act, + register thread_t thr_act, char *status) { register char *p = status; @@ -232,20 +234,13 @@ db_act_stat( *p++ = 'n', *p++ = 'g'; *p++ = ' '; - } else if (!thr_act->thread) { - *p++ = 'E', - *p++ = 'm', - *p++ = 'p', - *p++ = 't', - *p++ = 'y'; - *p++ = ' '; } else { - thread_t athread = thr_act->thread; + thread_t athread = thr_act; *p++ = (athread->state & TH_RUN) ? 'R' : '.'; *p++ = (athread->state & TH_WAIT) ? 'W' : '.'; *p++ = (athread->state & TH_SUSP) ? 'S' : '.'; - *p++ = (athread->state & TH_STACK_HANDOFF) ? 'O' : '.'; + *p++ = (!athread->kernel_stack) ? 'O' : '.'; *p++ = (athread->state & TH_UNINT) ? 'N' : '.'; /* show if the FPU has been used */ *p++ = db_act_fp_used(thr_act) ? 'F' : '.'; @@ -256,37 +251,10 @@ db_act_stat( char * db_act_swap_stat( - register thread_act_t thr_act, + register thread_t thr_act, char *status) { register char *p = status; - -#if THREAD_SWAPPER - switch (thr_act->swap_state & TH_SW_STATE) { - case TH_SW_UNSWAPPABLE: - *p++ = 'U'; - break; - case TH_SW_IN: - *p++ = 'I'; - break; - case TH_SW_GOING_OUT: - *p++ = 'G'; - break; - case TH_SW_WANT_IN: - *p++ = 'W'; - break; - case TH_SW_OUT: - *p++ = 'O'; - break; - case TH_SW_COMING_IN: - *p++ = 'C'; - break; - default: - *p++ = '?'; - break; - } - *p++ = (thr_act->swap_state & TH_SW_TASK_SWAPPING) ? 'T' : '.'; -#endif /* THREAD_SWAPPER */ *p++ = 0; return status; @@ -297,7 +265,7 @@ char *policy_list[] = { "TS", "RR", "??", "FF", void db_print_act( - thread_act_t thr_act, + thread_t thr_act, int act_id, int flag) { @@ -312,7 +280,7 @@ db_print_act( return; } - athread = thr_act->thread; + athread = thr_act; if (flag & OPTION_USER) { if (flag & OPTION_LONG) { @@ -325,7 +293,7 @@ db_print_act( policy = ((athread && (athread->sched_mode&TH_MODE_TIMESHARE))? 1: 2); db_printf("%s%3d%c %0*X %s %s %0*X %0*X %3d %3d/%s ", indent, act_id, - (thr_act == current_act())? '#': ':', + (thr_act == current_thread())? '#': ':', 2*sizeof(vm_offset_t), thr_act, db_act_stat(thr_act, status), db_act_swap_stat(thr_act, swap_status), @@ -348,7 +316,7 @@ db_print_act( } else db_printf(" "); db_printf("%3d%c(%0*X,%s)", act_id, - (thr_act == current_act())? '#': ':', + (thr_act == current_thread())? '#': ':', 2*sizeof(vm_offset_t), thr_act, db_act_stat(thr_act, status)); } @@ -365,9 +333,7 @@ db_print_act( (athread->state & TH_SUSP) ? 'S' : ' ', (athread->state & TH_UNINT)? 'N' : ' ', db_act_fp_used(thr_act) ? 'F' : ' '); - /* Obsolete TH_STACK_HANDOFF code, left for now; might enhance - * to print out safe_points instead */ - if (athread->state & TH_STACK_HANDOFF) { + if (!athread->kernel_stack) { if (athread->continuation) { db_printf("("); db_task_printsym((db_addr_t)athread->continuation, @@ -394,13 +360,13 @@ db_print_task( int task_id, int flag) { - thread_act_t thr_act; + thread_t thr_act; int act_id; char sstate; if (flag & OPTION_USER) { if (flag & OPTION_TASK_TITLE) { - db_printf(" ID: TASK MAP THD RES SUS PR SW %s", + db_printf(" ID: TASK MAP THD SUS PR SW %s", DB_TASK_NAME_TITLE); if ((flag & OPTION_LONG) == 0) db_printf(" ACTS"); @@ -431,10 +397,10 @@ db_print_task( sstate = 'I'; #endif /* TASK_SWAPPER */ /*** ??? fix me ***/ - db_printf("%3d: %0*X %0*X %3d %3d %3d %2d %c ", + db_printf("%3d: %0*X %0*X %3d %3d %2d %c ", task_id, 2*sizeof(vm_offset_t), task, 2*sizeof(vm_offset_t), task->map, - task->thr_act_count, task->res_act_count, + task->thread_count, task->suspend_count, task->priority, sstate); @@ -443,10 +409,10 @@ db_print_task( if (flag & OPTION_TASK_TITLE) flag |= OPTION_THREAD_TITLE; db_printf("\n"); - } else if (task->thr_act_count <= 1) + } else if (task->thread_count <= 1) flag &= ~OPTION_INDENT; act_id = 0; - queue_iterate(&task->thr_acts, thr_act, thread_act_t, thr_acts) { + queue_iterate(&task->threads, thr_act, thread_t, task_threads) { db_print_act(thr_act, act_id, flag); flag &= ~OPTION_THREAD_TITLE; act_id++; @@ -457,22 +423,22 @@ db_print_task( if (flag & OPTION_LONG) { if (flag & OPTION_TASK_TITLE) { db_printf(" TASK ACT\n"); - if (task->thr_act_count > 1) + if (task->thread_count > 1) flag |= OPTION_THREAD_TITLE; } } db_printf("%3d (%0*X): ", task_id, 2*sizeof(vm_offset_t), task); - if (task->thr_act_count == 0) { + if (task->thread_count == 0) { db_printf("no threads\n"); } else { - if (task->thr_act_count > 1) { - db_printf("%d threads: \n", task->thr_act_count); + if (task->thread_count > 1) { + db_printf("%d threads: \n", task->thread_count); flag |= OPTION_INDENT; } else flag &= ~OPTION_INDENT; act_id = 0; - queue_iterate(&task->thr_acts, thr_act, - thread_act_t, thr_acts) { + queue_iterate(&task->threads, thr_act, + thread_t, task_threads) { db_print_act(thr_act, act_id++, flag); flag &= ~OPTION_THREAD_TITLE; } @@ -487,7 +453,7 @@ db_print_space( int flag) { ipc_space_t space; - thread_act_t act = (thread_act_t)queue_first(&task->thr_acts); + thread_t act = (thread_t)queue_first(&task->threads); int count; count = 0; @@ -541,13 +507,13 @@ db_show_one_task_vm( db_expr_t count, char *modif) { - thread_act_t thread; + thread_t thread; task_t task; int task_id; if (have_addr == FALSE) { - if ((thread = db_default_act) == THR_ACT_NULL) { - if ((thread = current_act()) == THR_ACT_NULL) { + if ((thread = db_default_act) == THREAD_NULL) { + if ((thread = current_thread()) == THREAD_NULL) { db_printf("no thread.\n"); return; } @@ -641,7 +607,7 @@ db_show_one_space( task = (task_t) addr; if ((task_id = db_lookup_task(task)) < 0) { - db_printf("bad task address 0x%x\n", addr); + db_printf("bad task address 0x%llx\n", (unsigned long long)addr); db_error(0); /*NOTREACHED*/ } @@ -704,7 +670,7 @@ db_show_one_act( { int flag; int act_id; - thread_act_t thr_act; + thread_t thr_act; flag = OPTION_THREAD_TITLE; if (db_option(modif, 'u')) @@ -713,16 +679,16 @@ db_show_one_act( flag |= OPTION_LONG; if (!have_addr) { - thr_act = current_act(); - if (thr_act == THR_ACT_NULL) { + thr_act = current_thread(); + if (thr_act == THREAD_NULL) { db_error("No thr_act\n"); /*NOTREACHED*/ } } else - thr_act = (thread_act_t) addr; + thr_act = (thread_t) addr; if ((act_id = db_lookup_act(thr_act)) < 0) { - db_printf("bad thr_act address %#x\n", addr); + db_printf("bad thr_act address %#llX\n", (unsigned long long)addr); db_error(0); /*NOTREACHED*/ } @@ -738,12 +704,12 @@ db_show_one_act( 2*sizeof(vm_offset_t), thr_act->task, act_id); db_print_act(thr_act, act_id, flag); } - if (db_option(modif, 'i') && thr_act->thread && - (thr_act->thread->state & TH_WAIT) && - thr_act->thread->kernel_stack == 0) { + if (db_option(modif, 'i') && + (thr_act->state & TH_WAIT) && + thr_act->kernel_stack == 0) { db_printf("Wait State: option 0x%x\n", - thr_act->thread->ith_option); + thr_act->ith_option); } } @@ -774,7 +740,7 @@ db_show_one_task( task = (task_t) addr; if ((task_id = db_lookup_task(task)) < 0) { - db_printf("bad task address 0x%x\n", addr); + db_printf("bad task address 0x%llX\n", (unsigned long long)addr); db_error(0); /*NOTREACHED*/ } @@ -789,37 +755,21 @@ db_show_shuttle( db_expr_t count, char * modif) { - thread_shuttle_t shuttle; - thread_act_t thr_act; + thread_t thread; if (have_addr) - shuttle = (thread_shuttle_t) addr; + thread = (thread_t) addr; else { - thr_act = current_act(); - if (thr_act == THR_ACT_NULL) { - db_error("No thr_act\n"); + thread = current_thread(); + if (thread == THREAD_NULL) { + db_error("No thread\n"); /*NOTREACHED*/ } - shuttle = thr_act->thread; - if (shuttle == THREAD_NULL) { - db_error("No shuttle associated with current thr_act\n"); - /*NOTREACHED*/ - } - } - db_printf("shuttle %x:\n", shuttle); - if (shuttle->top_act == THR_ACT_NULL) - db_printf(" no activations\n"); - else { - db_printf(" activations:"); - for (thr_act = shuttle->top_act; thr_act != THR_ACT_NULL; - thr_act = thr_act->lower) { - if (thr_act != shuttle->top_act) - printf(" from"); - printf(" $task%d.%d(%x)", db_lookup_task(thr_act->task), - db_lookup_act(thr_act), thr_act); - } - db_printf("\n"); } + db_printf("thread %x:\n", thread); + printf(" $task%d.%d(%x)", db_lookup_task(thread->task), + db_lookup_act(thread), thread); + db_printf("\n"); } int @@ -883,7 +833,7 @@ db_print_one_entry( int db_port_iterate( - thread_act_t thr_act, + thread_t thr_act, boolean_t is_pset, boolean_t do_output) { @@ -923,13 +873,13 @@ db_port_iterate( ipc_port_t db_lookup_port( - thread_act_t thr_act, + thread_t thr_act, int id) { register ipc_space_t space; register ipc_entry_t entry; - if (thr_act == THR_ACT_NULL) + if (thr_act == THREAD_NULL) return(0); space = thr_act->task->itk_space; if (id < 0 || id >= space->is_table_size) @@ -961,18 +911,18 @@ db_show_port_id( db_expr_t count, char * modif) { - thread_act_t thr_act; + thread_t thr_act; if (!have_addr) { - thr_act = current_act(); - if (thr_act == THR_ACT_NULL) { + thr_act = current_thread(); + if (thr_act == THREAD_NULL) { db_error("No thr_act\n"); /*NOTREACHED*/ } } else - thr_act = (thread_act_t) addr; + thr_act = (thread_t) addr; if (db_lookup_act(thr_act) < 0) { - db_printf("Bad thr_act address 0x%x\n", addr); + db_printf("Bad thr_act address 0x%llX\n", addr); db_error(0); /*NOTREACHED*/ } @@ -1011,7 +961,6 @@ db_show_runq( run_queue_t runq; boolean_t showedany = FALSE; -#if NCPUS > 1 /* This code has not been tested. */ queue_iterate(&pset->processors, proc, processor_t, processors) { runq = &proc->runq; if (runq->count > 0) { @@ -1020,10 +969,6 @@ db_show_runq( showedany = TRUE; } } -#endif /* NCPUS > 1 */ -#ifndef NCPUS -#error NCPUS undefined -#endif runq = &pset->runq; if (runq->count > 0) { db_printf("PROCESSOR SET %x\n", pset); @@ -1038,9 +983,8 @@ void db_show_one_runq( run_queue_t runq) { - int i, task_id, thr_act_id; + int i, task_id, thread_id; queue_t q; - thread_act_t thr_act; thread_t thread; task_t task; @@ -1049,11 +993,10 @@ db_show_one_runq( if (!queue_empty(q)) { db_printf("%3d:", i); queue_iterate(q, thread, thread_t, links) { - thr_act = thread->top_act; - task = thr_act->task; + task = thread->task; task_id = db_lookup_task(task); - thr_act_id = db_lookup_task_act(task, thr_act); - db_printf(" %d.%d", task_id, thr_act_id); + thread_id = db_lookup_task_act(task, thread); + db_printf(" %d.%d", task_id, thread_id); } db_printf("\n"); }