PERFORCE change 101373 for review
John Baldwin
jhb at FreeBSD.org
Wed Jul 12 13:34:51 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=101373
Change 101373 by jhb at jhb_mutex on 2006/07/12 13:34:27
Convert db commands to use new pager interface. Non-normal changes
include:
- 'show idt' on i386 and pc98 didn't actually check the quit flag,
now it does.
- 'show intr' didn't actually check the quit flag either, but now it
does.
- 'show ktr' with the 'a' modifier has to disable the implicit
paging via a layering violation now to preserve it's semantics.
- sparc64 stack trace functions no longer have to pass quit pointers
around since db_utrace() can just check db_pager_quit directly.
Affected files ...
.. //depot/projects/smpng/sys/amd64/amd64/db_trace.c#18 edit
.. //depot/projects/smpng/sys/amd64/amd64/intr_machdep.c#17 edit
.. //depot/projects/smpng/sys/amd64/amd64/local_apic.c#22 edit
.. //depot/projects/smpng/sys/arm/arm/db_trace.c#14 edit
.. //depot/projects/smpng/sys/ddb/db_command.c#30 edit
.. //depot/projects/smpng/sys/ddb/db_ps.c#33 edit
.. //depot/projects/smpng/sys/ddb/db_thread.c#7 edit
.. //depot/projects/smpng/sys/dev/pci/pci.c#71 edit
.. //depot/projects/smpng/sys/i386/i386/db_trace.c#30 edit
.. //depot/projects/smpng/sys/i386/i386/intr_machdep.c#18 edit
.. //depot/projects/smpng/sys/i386/i386/local_apic.c#43 edit
.. //depot/projects/smpng/sys/i386/i386/machdep.c#108 edit
.. //depot/projects/smpng/sys/ia64/ia64/db_machdep.c#2 edit
.. //depot/projects/smpng/sys/kern/kern_intr.c#77 edit
.. //depot/projects/smpng/sys/kern/kern_ktr.c#34 edit
.. //depot/projects/smpng/sys/kern/subr_prf.c#45 edit
.. //depot/projects/smpng/sys/pc98/pc98/machdep.c#14 edit
.. //depot/projects/smpng/sys/powerpc/powerpc/db_trace.c#15 edit
.. //depot/projects/smpng/sys/sparc64/sparc64/db_trace.c#26 edit
Differences ...
==== //depot/projects/smpng/sys/amd64/amd64/db_trace.c#18 (text+ko) ====
@@ -390,16 +390,14 @@
long *argp;
db_expr_t offset;
c_db_sym_t sym;
- int narg, quit;
+ int narg;
boolean_t first;
if (count == -1)
count = 1024;
first = TRUE;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (count-- && !quit) {
+ while (count-- && !db_pager_quit) {
sym = db_search_symbol(pc, DB_STGY_ANY, &offset);
db_symbol_values(sym, &name, NULL);
==== //depot/projects/smpng/sys/amd64/amd64/intr_machdep.c#17 (text+ko) ====
@@ -338,16 +338,14 @@
DB_SHOW_COMMAND(irqs, db_show_irqs)
{
struct intsrc **isrc;
- int i, quit, verbose;
+ int i, verbose;
- quit = 0;
if (strcmp(modif, "v") == 0)
verbose = 1;
else
verbose = 0;
isrc = interrupt_sources;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (i = 0; i < NUM_IO_INTS && !quit; i++, isrc++)
+ for (i = 0; i < NUM_IO_INTS && !db_pager_quit; i++, isrc++)
if (*isrc != NULL)
db_dump_intr_event((*isrc)->is_event, verbose);
}
==== //depot/projects/smpng/sys/amd64/amd64/local_apic.c#22 (text+ko) ====
@@ -755,18 +755,16 @@
DB_SHOW_COMMAND(apic, db_show_apic)
{
struct intsrc *isrc;
- int quit, i, verbose;
+ int i, verbose;
u_int irq;
- quit = 0;
if (strcmp(modif, "vv") == 0)
verbose = 2;
else if (strcmp(modif, "v") == 0)
verbose = 1;
else
verbose = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (i = 0; i < APIC_NUM_IOINTS + 1 && !quit; i++) {
+ for (i = 0; i < APIC_NUM_IOINTS + 1 && !db_pager_quit; i++) {
irq = ioint_irqs[i];
if (irq != 0 && irq != IRQ_SYSCALL) {
db_printf("vec 0x%2x -> ", i + APIC_IO_INTS);
==== //depot/projects/smpng/sys/arm/arm/db_trace.c#14 (text+ko) ====
@@ -93,15 +93,13 @@
db_expr_t value;
db_expr_t offset;
boolean_t kernel_only = TRUE;
- int scp_offset, quit;
+ int scp_offset;
frame = (u_int32_t *)addr;
lastframe = NULL;
scp_offset = -(get_pc_str_offset() >> 2);
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (count-- && frame != NULL && !quit) {
+ while (count-- && frame != NULL && !db_pager_quit) {
db_addr_t scp;
u_int32_t savecode;
int r;
==== //depot/projects/smpng/sys/ddb/db_command.c#30 (text+ko) ====
@@ -676,16 +676,13 @@
{
struct proc *p;
struct thread *td;
- int quit;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
LIST_FOREACH(p, &allproc, p_list) {
FOREACH_THREAD_IN_PROC(p, td) {
db_printf("\nTracing command %s pid %d tid %ld td %p\n",
p->p_comm, p->p_pid, (long)td->td_tid, td);
db_trace_thread(td, -1);
- if (quit)
+ if (db_trace_quit)
return;
}
}
==== //depot/projects/smpng/sys/ddb/db_ps.c#33 (text+ko) ====
@@ -73,23 +73,21 @@
struct ucred *cred;
struct pgrp *pgrp;
char state[9];
- int np, quit, rflag, sflag, dflag, lflag, wflag;
+ int np, rflag, sflag, dflag, lflag, wflag;
np = nprocs;
- quit = 0;
if (!LIST_EMPTY(&allproc))
p = LIST_FIRST(&allproc);
else
p = &proc0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
#ifdef __LP64__
db_printf(" pid uid ppid pgrp state wmesg wchan cmd\n");
#else
db_printf(" pid uid ppid pgrp state wmesg wchan cmd\n");
#endif
- while (--np >= 0 && !quit) {
+ while (--np >= 0 && !db_pager_quit) {
if (p == NULL) {
db_printf("oops, ran out of processes early!\n");
break;
@@ -191,7 +189,7 @@
#endif
FOREACH_THREAD_IN_PROC(p, td) {
dumpthread(p, td, p->p_flag & P_HADTHREADS);
- if (quit)
+ if (db_pager_quit)
break;
}
@@ -363,7 +361,7 @@
{
struct thread *td;
struct proc *p;
- int i, quit;
+ int i;
/* Determine which process to examine. */
if (have_addr)
@@ -371,8 +369,6 @@
else
p = kdb_thread->td_proc;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
db_printf("Process %d (%s) at %p:\n", p->p_pid, p->p_comm, p);
db_printf(" state: ");
switch (p->p_state) {
@@ -411,7 +407,7 @@
db_printf(" threads: %d\n", p->p_numthreads);
FOREACH_THREAD_IN_PROC(p, td) {
dumpthread(p, td, 1);
- if (quit)
+ if (db_pager_quit)
break;
}
}
==== //depot/projects/smpng/sys/ddb/db_thread.c#7 (text+ko) ====
@@ -93,13 +93,9 @@
jmp_buf jb;
void *prev_jb;
struct thread *thr;
- int pager_quit;
-
- db_setup_paging(db_simple_pager, &pager_quit, db_lines_per_page);
- pager_quit = 0;
thr = kdb_thr_first();
- while (!pager_quit && thr != NULL) {
+ while (!db_pager_quit && thr != NULL) {
db_printf(" %6ld (%p) ", (long)thr->td_tid, thr);
prev_jb = kdb_jmpbuf(jb);
if (setjmp(jb) == 0) {
==== //depot/projects/smpng/sys/dev/pci/pci.c#71 (text+ko) ====
@@ -1716,7 +1716,7 @@
struct devlist *devlist_head;
struct pci_conf *p;
const char *name;
- int i, error, none_count, quit;
+ int i, error, none_count;
none_count = 0;
/* get the head of the device queue */
@@ -1725,10 +1725,9 @@
/*
* Go through the list of devices and print out devices
*/
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (error = 0, i = 0, quit = 0,
+ for (error = 0, i = 0,
dinfo = STAILQ_FIRST(devlist_head);
- (dinfo != NULL) && (error == 0) && (i < pci_numdevs) && !quit;
+ (dinfo != NULL) && (error == 0) && (i < pci_numdevs) && !db_pager_quit;
dinfo = STAILQ_NEXT(dinfo, pci_links), i++) {
/* Populate pd_name and pd_unit */
==== //depot/projects/smpng/sys/i386/i386/db_trace.c#30 (text+ko) ====
@@ -401,7 +401,7 @@
int *argp;
db_expr_t offset;
c_db_sym_t sym;
- int instr, narg, quit;
+ int instr, narg;
boolean_t first;
/*
@@ -432,9 +432,7 @@
count = 1024;
first = TRUE;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (count-- && !quit) {
+ while (count-- && !db_pager_quit) {
sym = db_search_symbol(pc, DB_STGY_ANY, &offset);
db_symbol_values(sym, &name, NULL);
==== //depot/projects/smpng/sys/i386/i386/intr_machdep.c#18 (text+ko) ====
@@ -338,16 +338,14 @@
DB_SHOW_COMMAND(irqs, db_show_irqs)
{
struct intsrc **isrc;
- int i, quit, verbose;
+ int i, verbose;
- quit = 0;
if (strcmp(modif, "v") == 0)
verbose = 1;
else
verbose = 0;
isrc = interrupt_sources;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (i = 0; i < NUM_IO_INTS && !quit; i++, isrc++)
+ for (i = 0; i < NUM_IO_INTS && !db_pager_quit; i++, isrc++)
if (*isrc != NULL)
db_dump_intr_event((*isrc)->is_event, verbose);
}
==== //depot/projects/smpng/sys/i386/i386/local_apic.c#43 (text+ko) ====
@@ -758,18 +758,16 @@
DB_SHOW_COMMAND(apic, db_show_apic)
{
struct intsrc *isrc;
- int quit, i, verbose;
+ int i, verbose;
u_int irq;
- quit = 0;
if (strcmp(modif, "vv") == 0)
verbose = 2;
else if (strcmp(modif, "v") == 0)
verbose = 1;
else
verbose = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (i = 0; i < APIC_NUM_IOINTS + 1 && !quit; i++) {
+ for (i = 0; i < APIC_NUM_IOINTS + 1 && !db_pager_quit; i++) {
irq = ioint_irqs[i];
if (irq != 0 && irq != IRQ_SYSCALL) {
db_printf("vec 0x%2x -> ", i + APIC_IO_INTS);
==== //depot/projects/smpng/sys/i386/i386/machdep.c#108 (text+ko) ====
@@ -1584,12 +1584,11 @@
DB_SHOW_COMMAND(idt, db_show_idt)
{
struct gate_descriptor *ip;
- int idx, quit;
+ int idx;
uintptr_t func;
ip = idt;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (idx = 0, quit = 0; idx < NIDT; idx++) {
+ for (idx = 0; idx < NIDT && !db_pager_quit; idx++) {
func = (ip->gd_hioffset << 16 | ip->gd_looffset);
if (func != (uintptr_t)&IDTVEC(rsvd)) {
db_printf("%3d\t", idx);
==== //depot/projects/smpng/sys/ia64/ia64/db_machdep.c#2 (text+ko) ====
@@ -228,12 +228,10 @@
db_expr_t offset;
uint64_t bsp, cfm, ip, pfs, reg, sp;
c_db_sym_t sym;
- int args, error, i, quit;
+ int args, error, i;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
error = unw_create_from_pcb(&rs, pcb);
- while (!error && count-- && !quit) {
+ while (!error && count-- && !db_pager_quit) {
error = unw_get_cfm(&rs, &cfm);
if (!error)
error = unw_get_bsp(&rs, &bsp);
==== //depot/projects/smpng/sys/kern/kern_intr.c#77 (text+ko) ====
@@ -905,16 +905,16 @@
DB_SHOW_COMMAND(intr, db_show_intr)
{
struct intr_event *ie;
- int quit, all, verbose;
+ int all, verbose;
- quit = 0;
verbose = index(modif, 'v') != NULL;
all = index(modif, 'a') != NULL;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
TAILQ_FOREACH(ie, &event_list, ie_list) {
if (!all && TAILQ_EMPTY(&ie->ie_handlers))
continue;
db_dump_intr_event(ie, verbose);
+ if (db_pager_quit)
+ break;
}
}
#endif /* DDB */
@@ -976,11 +976,9 @@
{
u_long *i;
char *cp;
- int quit;
cp = intrnames;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (i = intrcnt, quit = 0; i != eintrcnt && !quit; i++) {
+ for (i = intrcnt; i != eintrcnt && !db_pager_quit; i++) {
if (*cp == '\0')
break;
if (*i != 0)
==== //depot/projects/smpng/sys/kern/kern_ktr.c#34 (text+ko) ====
@@ -55,8 +55,10 @@
#include <machine/ktr.h>
#endif
-
+#ifdef DDB
#include <ddb/ddb.h>
+#include <ddb/db_output.h>
+#endif
#ifndef KTR_ENTRIES
#define KTR_ENTRIES 1024
@@ -288,22 +290,17 @@
DB_SHOW_COMMAND(ktr, db_ktr_all)
{
- int quit;
- quit = 0;
tstate.cur = (ktr_idx - 1) & (KTR_ENTRIES - 1);
tstate.first = -1;
- if (strcmp(modif, "v") == 0)
- db_ktr_verbose = 1;
- else
- db_ktr_verbose = 0;
- if (strcmp(modif, "a") == 0) {
+ db_ktr_verbose = index(modif, 'v') != NULL;
+ if (index(modif, 'a') != NULL) {
+ db_disable_pager();
while (cncheckc() != -1)
if (db_mach_vtrace() == 0)
break;
} else {
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (!quit)
+ while (!db_pager_quit)
if (db_mach_vtrace() == 0)
break;
}
==== //depot/projects/smpng/sys/kern/subr_prf.c#45 (text+ko) ====
@@ -912,20 +912,17 @@
DB_SHOW_COMMAND(msgbuf, db_show_msgbuf)
{
- int i, j, quit;
-
- quit = 0;
+ int i, j;
if (!msgbufmapped) {
db_printf("msgbuf not mapped yet\n");
return;
}
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
db_printf("msgbufp = %p\n", msgbufp);
db_printf("magic = %x, size = %d, r= %u, w = %u, ptr = %p, cksum= %u\n",
msgbufp->msg_magic, msgbufp->msg_size, msgbufp->msg_rseq,
msgbufp->msg_wseq, msgbufp->msg_ptr, msgbufp->msg_cksum);
- for (i = 0; i < msgbufp->msg_size && !quit; i++) {
+ for (i = 0; i < msgbufp->msg_size && !db_pager_quit; i++) {
j = MSGBUF_SEQ_TO_POS(msgbufp, i + msgbufp->msg_rseq);
db_printf("%c", msgbufp->msg_ptr[j]);
}
==== //depot/projects/smpng/sys/pc98/pc98/machdep.c#14 (text+ko) ====
@@ -1581,12 +1581,11 @@
DB_SHOW_COMMAND(idt, db_show_idt)
{
struct gate_descriptor *ip;
- int idx, quit;
+ int idx;
uintptr_t func;
ip = idt;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- for (idx = 0, quit = 0; idx < NIDT; idx++) {
+ for (idx = 0; idx < NIDT && !db_pager_quit; idx++) {
func = (ip->gd_hioffset << 16 | ip->gd_looffset);
if (func != (uintptr_t)&IDTVEC(rsvd)) {
db_printf("%3d\t", idx);
==== //depot/projects/smpng/sys/powerpc/powerpc/db_trace.c#15 (text+ko) ====
@@ -131,7 +131,6 @@
const char *symname;
boolean_t kernel_only = TRUE;
boolean_t full = FALSE;
- int quit;
#if 0
{
@@ -151,9 +150,7 @@
stackframe = fp;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (!quit) {
+ while (!db_pager_quit) {
if (stackframe < PAGE_SIZE)
break;
==== //depot/projects/smpng/sys/sparc64/sparc64/db_trace.c#26 (text+ko) ====
@@ -103,7 +103,7 @@
* User stack trace (debugging aid).
*/
static void
-db_utrace(struct thread *td, struct trapframe *tf, int count, int *quitp)
+db_utrace(struct thread *td, struct trapframe *tf, int count)
{
struct pcb *pcb;
db_addr_t sp, rsp, o7, pc;
@@ -115,7 +115,7 @@
FALSE);
pc = db_get_value((db_addr_t)&tf->tf_tpc, sizeof(tf->tf_tpc), FALSE);
db_printf("user trace: trap %%o7=%#lx\n", o7);
- while (count-- && sp != 0 && !*quitp) {
+ while (count-- && sp != 0 && !db_pager_quit) {
db_printf("pc %#lx, sp %#lx\n", pc, sp);
/* First, check whether the frame is in the pcb. */
found = 0;
@@ -141,7 +141,7 @@
}
static int
-db_print_trap(struct thread *td, struct trapframe *tf, int count, int *quitp)
+db_print_trap(struct thread *td, struct trapframe *tf, int count)
{
struct proc *p;
const char *symname;
@@ -219,7 +219,7 @@
db_printf("userland() at ");
db_printsym(tpc, DB_STGY_PROC);
db_printf("\n");
- db_utrace(td, tf, count, quitp);
+ db_utrace(td, tf, count);
}
return (user);
}
@@ -236,7 +236,6 @@
db_addr_t pc;
int trap;
int user;
- int quit;
if (count == -1)
count = 1024;
@@ -244,9 +243,7 @@
trap = 0;
user = 0;
npc = 0;
- quit = 0;
- db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
- while (count-- && !user && !quit) {
+ while (count-- && !user && !db_pager_quit) {
pc = (db_addr_t)db_get_value((db_addr_t)&fp->fr_pc,
sizeof(fp->fr_pc), FALSE);
if (trap) {
@@ -272,7 +269,7 @@
tf = (struct trapframe *)(fp + 1);
npc = db_get_value((db_addr_t)&tf->tf_tpc,
sizeof(tf->tf_tpc), FALSE);
- user = db_print_trap(td, tf, count, &quit);
+ user = db_print_trap(td, tf, count);
trap = 1;
} else {
db_printf("%s() at ", name);
More information about the p4-projects
mailing list