Module Name: src Committed By: mrg Date: Sat Sep 26 20:38:27 UTC 2020
Modified Files: src/sys/arch/mips/mips: db_trace.c Log Message: redo much of rev 1.45 and make the _KERNEL path look like it used to before. while it uses less total lines of code and looks less ugly, the merged crash+ddb code here is less correct and harder to follow for the kernel path. To generate a diff of this commit: cvs rdiff -u -r1.46 -r1.47 src/sys/arch/mips/mips/db_trace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/mips/db_trace.c diff -u src/sys/arch/mips/mips/db_trace.c:1.46 src/sys/arch/mips/mips/db_trace.c:1.47 --- src/sys/arch/mips/mips/db_trace.c:1.46 Sat Sep 26 04:11:48 2020 +++ src/sys/arch/mips/mips/db_trace.c Sat Sep 26 20:38:27 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: db_trace.c,v 1.46 2020/09/26 04:11:48 simonb Exp $ */ +/* $NetBSD: db_trace.c,v 1.47 2020/09/26 20:38:27 mrg Exp $ */ /* * Mach Operating System @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.46 2020/09/26 04:11:48 simonb Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.47 2020/09/26 20:38:27 mrg Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -141,8 +141,6 @@ db_stack_trace_print(db_expr_t addr, boo { #ifndef DDB_TRACE struct pcb *pcb; - struct proc p; - struct lwp l; const char *cp = modif; char c; bool lwpaddr = false; @@ -173,27 +171,42 @@ db_stack_trace_print(db_expr_t addr, boo } if (lwpaddr) { - db_read_bytes(addr, sizeof(l), (char *)&l); - db_read_bytes((db_addr_t)l.l_proc, sizeof(p), (char *)&p); - (*pr)("pid %d.%d ", p.p_pid, l.l_lid); +#ifdef _KERNEL + struct lwp *l; + + l = (struct lwp *)(intptr_t)addr; + (*pr)("pid %d.%d ", l->l_proc->p_pid, l->l_lid); + pcb = lwp_getpcb(l); +#else + struct proc pstore; + struct lwp lstore; + + db_read_bytes(addr, sizeof(lstore), (char *)&lstore); + db_read_bytes((db_addr_t)lstore.l_proc, sizeof(pstore), + (char *)&pstore); + (*pr)("pid %d.%d ", pstore.p_pid, lstore.l_lid); + pcb = lwp_getpcb(&lstore); +#endif } else { /* "trace/t" */ (*pr)("pid %d ", (int)addr); #ifdef _KERNEL - struct proc *p2 = proc_find_raw(addr); - if (p2 == NULL) { + struct lwp *l; + struct proc *p = proc_find_raw(addr); + + if (p == NULL) { (*pr)("not found\n"); return; } - l = *LIST_FIRST(&p2->p_lwps); /* XXX NJWLWP */ + l = LIST_FIRST(&p->p_lwps); /* XXX NJWLWP */ + pcb = lwp_getpcb(l); #else (*pr)("no proc_find_raw() in crash\n"); return; #endif } - pcb = lwp_getpcb(&l); (*pr)("at %p\n", pcb); #ifdef _KERNEL