Changeset View
Changeset View
Standalone View
Standalone View
sys/ddb/db_ps.c
Show First 20 Lines • Show All 495 Lines • ▼ Show 20 Lines | if (db_pager_quit) | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
void | void | ||||
db_findstack_cmd(db_expr_t addr, bool have_addr, db_expr_t dummy3 __unused, | db_findstack_cmd(db_expr_t addr, bool have_addr, db_expr_t dummy3 __unused, | ||||
char *dummy4 __unused) | char *dummy4 __unused) | ||||
{ | { | ||||
struct proc *p; | |||||
struct thread *td; | struct thread *td; | ||||
vm_offset_t saddr; | vm_offset_t saddr; | ||||
if (have_addr) | if (have_addr) | ||||
saddr = addr; | saddr = addr; | ||||
else { | else { | ||||
db_printf("Usage: findstack <address>\n"); | db_printf("Usage: findstack <address>\n"); | ||||
return; | return; | ||||
} | } | ||||
FOREACH_PROC_IN_SYSTEM(p) { | for (td = kdb_thr_first(); td != NULL; td = kdb_thr_next(td)) { | ||||
FOREACH_THREAD_IN_PROC(p, td) { | |||||
if (kstack_contains(td, saddr, 1)) { | if (kstack_contains(td, saddr, 1)) { | ||||
db_printf("Thread %p\n", td); | db_printf("Thread %p\n", td); | ||||
return; | return; | ||||
} | |||||
} | } | ||||
} | } | ||||
} | } |