diff options
author | 2002-05-18 09:49:16 +0000 | |
---|---|---|
committer | 2002-05-18 09:49:16 +0000 | |
commit | 332a70d350968331aa265465817ca5a3db75e44c (patch) | |
tree | 06d6060f2039b51974696206d2e47258d302a2fc | |
parent | when detaching form a process don't forget to remove posted messages. (diff) | |
download | wireguard-openbsd-332a70d350968331aa265465817ca5a3db75e44c.tar.xz wireguard-openbsd-332a70d350968331aa265465817ca5a3db75e44c.zip |
Rename the MD db_stack_trace_cmd to db_stack_trace_print. Add an argument
that specifies which printf funciton it should use. Implement
db_stack_trace_cmd in MI code.
Thanks to miod@ for all the tests.
-rw-r--r-- | sys/arch/alpha/alpha/db_trace.c | 27 | ||||
-rw-r--r-- | sys/arch/hppa/hppa/db_interface.c | 25 | ||||
-rw-r--r-- | sys/arch/i386/i386/db_trace.c | 43 | ||||
-rw-r--r-- | sys/arch/m68k/m68k/db_trace.c | 19 | ||||
-rw-r--r-- | sys/arch/macppc/include/db_machdep.h | 4 | ||||
-rw-r--r-- | sys/arch/macppc/macppc/db_trace.c | 11 | ||||
-rw-r--r-- | sys/arch/mvme88k/ddb/db_trace.c | 131 | ||||
-rw-r--r-- | sys/arch/mvmeppc/ddb/db_trace.c | 19 | ||||
-rw-r--r-- | sys/arch/powerpc/powerpc/trap.c | 5 | ||||
-rw-r--r-- | sys/arch/sparc/sparc/db_trace.c | 15 | ||||
-rw-r--r-- | sys/arch/sparc64/sparc64/db_trace.c | 8 | ||||
-rw-r--r-- | sys/arch/vax/vax/db_machdep.c | 79 | ||||
-rw-r--r-- | sys/ddb/db_command.c | 9 | ||||
-rw-r--r-- | sys/ddb/db_command.h | 3 | ||||
-rw-r--r-- | sys/ddb/db_interface.h | 5 |
15 files changed, 211 insertions, 192 deletions
diff --git a/sys/arch/alpha/alpha/db_trace.c b/sys/arch/alpha/alpha/db_trace.c index 791cbb96d68..a56939b18c3 100644 --- a/sys/arch/alpha/alpha/db_trace.c +++ b/sys/arch/alpha/alpha/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.10 2002/05/16 13:01:41 art Exp $ */ +/* $OpenBSD: db_trace.c,v 1.11 2002/05/18 09:49:16 art Exp $ */ /* * Copyright (c) 1997 Niklas Hallqvist. All rights reserverd. @@ -177,11 +177,12 @@ disp(x) * symbols available. */ void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { u_long *frame; int i, framesize; @@ -213,7 +214,7 @@ trapframe: /* Limit the search for procedure start */ offset = 65536; } - db_printf("%s(", name); + (*pr)("%s(", name); framesize = 0; for (i = sizeof (int); i <= offset; i += sizeof (int)) { @@ -269,11 +270,11 @@ trapframe: */ for (i = 0; i < 6; i++) { if (i > 0) - db_printf(", "); + (*pr)(", "); if (slot[16 + i]) - db_printf("%lx", *slot[16 + i]); + (*pr)("%lx", *slot[16 + i]); else - db_printf("?"); + (*pr)("?"); } #if 0 @@ -283,18 +284,18 @@ trapframe: * * Print the stack frame contents. */ - db_printf(") [%p: ", frame); + (*pr)(") [%p: ", frame); if (framesize > 1) { for (i = 0; i < framesize - 1; i++) - db_printf("%lx, ", frame[i]); - db_printf("%lx", frame[i]); + (*pr)("%lx, ", frame[i]); + (*pr)("%lx", frame[i]); } - db_printf("] at "); + (*pr)("] at "); #else - db_printf(") at "); + (*pr)(") at "); #endif - db_printsym(pc, DB_STGY_PROC, db_printf); - db_printf("\n"); + db_printsym(pc, DB_STGY_PROC, pr); + (*pr)("\n"); /* * If we are looking at a Xent* routine we are in a trap diff --git a/sys/arch/hppa/hppa/db_interface.c b/sys/arch/hppa/hppa/db_interface.c index 05ad236baad..cb5d279b641 100644 --- a/sys/arch/hppa/hppa/db_interface.c +++ b/sys/arch/hppa/hppa/db_interface.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_interface.c,v 1.20 2002/05/16 20:16:15 mickey Exp $ */ +/* $OpenBSD: db_interface.c,v 1.21 2002/05/18 09:49:17 art Exp $ */ /* * Copyright (c) 1999-2000 Michael Shalayeff @@ -235,11 +235,12 @@ db_valid_breakpoint(addr) } void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { register_t fp, pc, rp, nargs, *argp; db_sym_t sym; @@ -261,7 +262,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) } #ifdef DDB_DEBUG - /* db_printf (">> %x, %x, %x\t", fp, pc, rp); */ + /* (*pr) (">> %x, %x, %x\t", fp, pc, rp); */ #endif while (fp && count--) { @@ -271,7 +272,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) sym = db_search_symbol(pc, DB_STGY_ANY, &off); db_symbol_values (sym, &name, NULL); - db_printf("%s(", name); + (*pr)("%s(", name); /* args */ nargs = HPPA_FRAME_NARGS; @@ -286,13 +287,13 @@ db_stack_trace_cmd(addr, have_addr, count, modif) */ for (argp = &((register_t *)fp)[-9]; nargs--; argp--) { if (argnp) - db_printf("%s=", *argnp++); - db_printf("%x%s", db_get_value((int)argp, 4, FALSE), + (*pr)("%s=", *argnp++); + (*pr)("%x%s", db_get_value((int)argp, 4, FALSE), nargs? ",":""); } - db_printf(") at "); - db_printsym(pc, DB_STGY_PROC, db_printf); - db_printf("\n"); + (*pr)(") at "); + db_printsym(pc, DB_STGY_PROC, pr); + (*pr)("\n"); /* TODO: print locals */ @@ -301,13 +302,13 @@ db_stack_trace_cmd(addr, have_addr, count, modif) rp = ((register_t *)fp)[-5]; fp = ((register_t *)fp)[0]; #ifdef DDB_DEBUG - /* db_printf (">> %x, %x, %x\t", fp, pc, rp); */ + /* (*pr) (">> %x, %x, %x\t", fp, pc, rp); */ #endif } if (count && pc) { - db_printsym(pc, DB_STGY_XTRN, db_printf); - db_printf(":\n"); + db_printsym(pc, DB_STGY_XTRN, pr); + (*pr)(":\n"); } } diff --git a/sys/arch/i386/i386/db_trace.c b/sys/arch/i386/i386/db_trace.c index 5c1c4ce9253..90bc7ef66d8 100644 --- a/sys/arch/i386/i386/db_trace.c +++ b/sys/arch/i386/i386/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.6 2002/05/16 13:01:41 art Exp $ */ +/* $OpenBSD: db_trace.c,v 1.7 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_trace.c,v 1.18 1996/05/03 19:42:01 christos Exp $ */ /* @@ -83,7 +83,8 @@ boolean_t db_trace_symbols_found = FALSE; void db_find_trace_symbols(void); int db_numargs(struct i386_frame *); -void db_nextframe(struct i386_frame **, db_addr_t *, int *, int); +void db_nextframe(struct i386_frame **, db_addr_t *, int *, int, + int (*pr)(const char *, ...)); void db_find_trace_symbols() @@ -137,11 +138,12 @@ db_numargs(fp) * of the function that faulted, but that could get hairy. */ void -db_nextframe(fp, ip, argp, is_trap) +db_nextframe(fp, ip, argp, is_trap, pr) struct i386_frame **fp; /* in/out */ db_addr_t *ip; /* out */ int *argp; /* in */ int is_trap; /* in */ + int (*pr)(const char *, ...); { switch (is_trap) { @@ -159,13 +161,13 @@ db_nextframe(fp, ip, argp, is_trap) tf = (struct trapframe *)argp; switch (is_trap) { case TRAP: - db_printf("--- trap (number %d) ---\n", tf->tf_trapno); + (*pr)("--- trap (number %d) ---\n", tf->tf_trapno); break; case SYSCALL: - db_printf("--- syscall (number %d) ---\n", tf->tf_eax); + (*pr)("--- syscall (number %d) ---\n", tf->tf_eax); break; case INTERRUPT: - db_printf("--- interrupt ---\n"); + (*pr)("--- interrupt ---\n"); break; } *fp = (struct i386_frame *)tf->tf_ebp; @@ -176,11 +178,12 @@ db_nextframe(fp, ip, argp, is_trap) } void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; boolean_t have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { struct i386_frame *frame, *lastframe; int *argp; @@ -213,7 +216,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) frame = (struct i386_frame *)ddb_regs.tf_ebp; callpc = (db_addr_t)ddb_regs.tf_eip; } else if (trace_thread) { - db_printf ("db_trace.c: can't trace thread\n"); + (*pr) ("db_trace.c: can't trace thread\n"); } else { frame = (struct i386_frame *)addr; callpc = (db_addr_t) @@ -273,7 +276,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) narg = db_numargs(frame); } - db_printf("%s(", name); + (*pr)("%s(", name); if (lastframe == 0 && offset == 0 && !have_addr) { /* @@ -287,15 +290,15 @@ db_stack_trace_cmd(addr, have_addr, count, modif) while (narg) { if (argnp) - db_printf("%s=", *argnp++); - db_printf("%x", db_get_value((int)argp, 4, FALSE)); + (*pr)("%s=", *argnp++); + (*pr)("%x", db_get_value((int)argp, 4, FALSE)); argp++; if (--narg != 0) - db_printf(","); + (*pr)(","); } - db_printf(") at "); - db_printsym(callpc, DB_STGY_PROC, db_printf); - db_printf("\n"); + (*pr)(") at "); + db_printsym(callpc, DB_STGY_PROC, pr); + (*pr)("\n"); if (lastframe == 0 && offset == 0 && !have_addr) { /* Frame really belongs to next callpc */ @@ -306,7 +309,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) } lastframe = frame; - db_nextframe(&frame, &callpc, &frame->f_arg0, is_trap); + db_nextframe(&frame, &callpc, &frame->f_arg0, is_trap, pr); if (frame == 0) { /* end of chain */ @@ -315,7 +318,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) if (INKERNEL((int)frame)) { /* staying in kernel */ if (frame <= lastframe) { - db_printf("Bad frame pointer: %p\n", frame); + (*pr)("Bad frame pointer: %p\n", frame); break; } } else if (INKERNEL((int)lastframe)) { @@ -325,7 +328,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) } else { /* in user */ if (frame <= lastframe) { - db_printf("Bad user frame pointer: %p\n", + (*pr)("Bad user frame pointer: %p\n", frame); break; } @@ -334,7 +337,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) } if (count && is_trap != NONE) { - db_printsym(callpc, DB_STGY_XTRN, db_printf); - db_printf(":\n"); + db_printsym(callpc, DB_STGY_XTRN, pr); + (*pr)(":\n"); } } diff --git a/sys/arch/m68k/m68k/db_trace.c b/sys/arch/m68k/m68k/db_trace.c index ef32a9471b3..c69caa9a0d2 100644 --- a/sys/arch/m68k/m68k/db_trace.c +++ b/sys/arch/m68k/m68k/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.16 2002/03/14 03:15:54 millert Exp $ */ +/* $OpenBSD: db_trace.c,v 1.17 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_trace.c,v 1.20 1997/02/05 05:10:25 scottr Exp $ */ /* @@ -466,11 +466,12 @@ findregs(sp, addr) * Frame tracing. */ void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { int i, nargs; long val; @@ -579,7 +580,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) fault_pc = 0; } - db_printf("%s", name); + (*pr)("%s", name); if (pos.k_entry != MAXINT && name) { char * entry_name; long e_val; @@ -588,22 +589,22 @@ db_stack_trace_cmd(addr, have_addr, count, modif) &e_val); if (entry_name != 0 && entry_name != name && e_val != val) { - db_printf("(?)\n%s", entry_name); + (*pr)("(?)\n%s", entry_name); } } - db_printf("("); + (*pr)("("); regp = pos.k_fp + FR_SAVFP + 4; if ((nargs = pos.k_nargs)) { while (nargs--) { - db_printf("%lx", get(regp += 4, DSP)); + (*pr)("%lx", get(regp += 4, DSP)); if (nargs) - db_printf(","); + (*pr)(","); } } if (val == MAXINT) - db_printf(") at %x\n", pos.k_pc); + (*pr)(") at %x\n", pos.k_pc); else - db_printf(") + %lx\n", val); + (*pr)(") + %lx\n", val); /* * Stop tracing if frame ptr no longer points into kernel diff --git a/sys/arch/macppc/include/db_machdep.h b/sys/arch/macppc/include/db_machdep.h index 8729634e918..970542767a8 100644 --- a/sys/arch/macppc/include/db_machdep.h +++ b/sys/arch/macppc/include/db_machdep.h @@ -1,4 +1,4 @@ -/* $OpenBSD: db_machdep.h,v 1.3 2002/03/14 01:26:36 millert Exp $ */ +/* $OpenBSD: db_machdep.h,v 1.4 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_machdep.h,v 1.13 1996/04/29 20:50:08 leo Exp $ */ /* @@ -96,7 +96,7 @@ void kdb_kintr(void *); int kdb_trap(int, void *); void db_save_regs(struct trapframe *frame); void ddb_trap(void); -db_expr_t db_dumpframe(u_int32_t pframe); +db_expr_t db_dumpframe(u_int32_t pframe, int (*pr)(const char *, ...)); #endif /* _KERNEL */ diff --git a/sys/arch/macppc/macppc/db_trace.c b/sys/arch/macppc/macppc/db_trace.c index ecec384b2bf..f730363caa8 100644 --- a/sys/arch/macppc/macppc/db_trace.c +++ b/sys/arch/macppc/macppc/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.5 2001/09/15 21:15:03 drahn Exp $ */ +/* $OpenBSD: db_trace.c,v 1.6 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_trace.c,v 1.15 1996/02/22 23:23:41 gwr Exp $ */ /* @@ -111,7 +111,7 @@ db_read32(u_int32_t paddr, u_int32_t *value) } db_expr_t -db_dumpframe(u_int32_t pframe) +db_dumpframe(u_int32_t pframe, int (*pr)(const char *, ...)) { u_int32_t nextframe; u_int32_t lr; @@ -131,7 +131,7 @@ db_dumpframe(u_int32_t pframe) name = "0"; offset = lr-4; } - db_printf("%08x: %s+0x%x fp %x nfp %x\n", + (*pr)("%08x: %s+0x%x fp %x nfp %x\n", lr-4, name, offset, pframe, nextframe); return nextframe; @@ -140,11 +140,12 @@ db_dumpframe(u_int32_t pframe) * Frame tracing. */ void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { if (count == 0 || count == -1) @@ -153,7 +154,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) addr = ddb_regs.tf.fixreg[1]; } while (addr != 0 && count > 0) { - addr = db_dumpframe(addr); + addr = db_dumpframe(addr, pr); count --; } } diff --git a/sys/arch/mvme88k/ddb/db_trace.c b/sys/arch/mvme88k/ddb/db_trace.c index ccd3c69dba7..418bfb7b1e6 100644 --- a/sys/arch/mvme88k/ddb/db_trace.c +++ b/sys/arch/mvme88k/ddb/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.15 2002/05/16 13:01:41 art Exp $ */ +/* $OpenBSD: db_trace.c,v 1.16 2002/05/18 09:49:17 art Exp $ */ /* * Mach Operating System * Copyright (c) 1993-1991 Carnegie Mellon University @@ -99,8 +99,8 @@ extern void db_read_bytes(vm_offset_t addr, int size, char *data); int frame_is_sane(db_regs_t *regs); char *m88k_exception_name(unsigned vector); unsigned db_trace_get_val(vm_offset_t addr, unsigned *ptr); -void db_stack_trace_cmd(db_regs_t *addr, int have_addr, - db_expr_t count, char *modif); +void db_stack_trace_print(db_regs_t *addr, int have_addr, + db_expr_t count, char *modif, int (*pr)(const char *, ...)); /* * Some macros to tell if the given text is the instruction. @@ -559,7 +559,7 @@ static int next_address_likely_wrong = 0; * */ static int -stack_decode(unsigned addr, unsigned *stack) +stack_decode(unsigned addr, unsigned *stack, int (*pr)(const char *, ...)) { db_sym_t proc; unsigned offset_from_proc; @@ -573,7 +573,7 @@ stack_decode(unsigned addr, unsigned *stack) #ifdef TRACE_DEBUG if (DEBUGGING_ON) - db_printf("\n>>>stack_decode(addr=%x, stack=%x)\n", + (*pr)("\n>>>stack_decode(addr=%x, stack=%x)\n", addr, *stack); #endif @@ -593,7 +593,7 @@ stack_decode(unsigned addr, unsigned *stack) if (names == 0) return 0; #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("name %s address 0x%x\n", + if (DEBUGGING_ON) (*pr)("name %s address 0x%x\n", names, function_addr); #endif } else { @@ -637,7 +637,7 @@ stack_decode(unsigned addr, unsigned *stack) if (JMP_R1(inst) || JMPN_R1(inst)) { #ifdef TRACE_DEBUG if (DEBUGGING_ON) - db_printf("ran into a [jmp r1] at %x (addr=%x)\n", + (*pr)("ran into a [jmp r1] at %x (addr=%x)\n", check_addr, addr); #endif return 0; @@ -646,7 +646,7 @@ stack_decode(unsigned addr, unsigned *stack) if (instructions_to_check < 0) { #ifdef TRACE_DEBUG if (DEBUGGING_ON) - db_printf("couldn't find func start (addr=%x)\n", addr); + (*pr)("couldn't find func start (addr=%x)\n", addr); #endif return 0; /* bummer, couldn't find it */ } @@ -661,13 +661,13 @@ stack_decode(unsigned addr, unsigned *stack) */ if (addr == function_addr) { #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("at start of func\n"); + if (DEBUGGING_ON) (*pr)("at start of func\n"); #endif return 0; } if (!db_trace_get_val(function_addr, &inst)) { #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("couldn't read %x at line %d\n", + if (DEBUGGING_ON) (*pr)("couldn't read %x at line %d\n", function_addr, __LINE__); #endif return 0; @@ -675,7 +675,7 @@ stack_decode(unsigned addr, unsigned *stack) SHOW_INSTRUCTION(function_addr, inst, "start of function: "); if (!SUBU_R31_R31_IMM(inst)) { #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("<not subu,r31,r31,imm>\n"); + if (DEBUGGING_ON) (*pr)("<not subu,r31,r31,imm>\n"); #endif return 0; } @@ -702,7 +702,7 @@ stack_decode(unsigned addr, unsigned *stack) /* read the instruction */ if (!db_trace_get_val(check_addr, &instruction.rawbits)) { #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("couldn't read %x at line %d\n", + if (DEBUGGING_ON) (*pr)("couldn't read %x at line %d\n", check_addr, __LINE__); #endif break; @@ -747,11 +747,11 @@ stack_decode(unsigned addr, unsigned *stack) */ if (!have_local_reg(1)) { if (tried_to_save_r1) { - db_printf(" <return value of next fcn unreadable in %08x>\n", + (*pr)(" <return value of next fcn unreadable in %08x>\n", tried_to_save_r1); } #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("didn't save r1\n"); + if (DEBUGGING_ON) (*pr)("didn't save r1\n"); #endif return 0; } @@ -760,7 +760,7 @@ stack_decode(unsigned addr, unsigned *stack) #ifdef TRACE_DEBUG if (DEBUGGING_ON) - db_printf("Return value is = %x, function_addr is %x.\n", + (*pr)("Return value is = %x, function_addr is %x.\n", ret_addr, function_addr); #endif @@ -779,7 +779,7 @@ stack_decode(unsigned addr, unsigned *stack) case JUMP_SOURCE_IS_BAD: #ifdef TRACE_DEBUG - if (DEBUGGING_ON) db_printf("jump is bad\n"); + if (DEBUGGING_ON) (*pr)("jump is bad\n"); #endif return 0; /* bummer */ @@ -793,7 +793,7 @@ stack_decode(unsigned addr, unsigned *stack) } static void -db_stack_trace_cmd2(db_regs_t *regs) +db_stack_trace_cmd2(db_regs_t *regs, int (*pr)(const char *, ...)) { unsigned stack; unsigned depth=1; @@ -810,7 +810,7 @@ db_stack_trace_cmd2(db_regs_t *regs) * 0 if this looks like neither. */ if (ft = frame_is_sane(regs), ft == 0) { - db_printf("Register frame 0x%x is suspicous; skipping trace\n", regs); + (*pr)("Register frame 0x%x is suspicous; skipping trace\n", regs); return; } @@ -828,25 +828,25 @@ db_stack_trace_cmd2(db_regs_t *regs) regs->sfip) ) & ~3; } stack = regs->r[31]; - db_printf("stack base = 0x%x\n", stack); - db_printf("(0) "); /*depth of trace */ + (*pr)("stack base = 0x%x\n", stack); + (*pr)("(0) "); /*depth of trace */ if (trace_flags & TRACE_SHOWADDRESS_FLAG) - db_printf("%08x ", where); - db_printsym(where, DB_STGY_PROC, db_printf); + (*pr)("%08x ", where); + db_printsym(where, DB_STGY_PROC, pr); clear_global_saved_regs(); /* see if this routine had a stack frame */ - if ((where=stack_decode(where, &stack))==0) { + if ((where=stack_decode(where, &stack, pr))==0) { where = regs->r[1]; - db_printf("(stackless)"); + (*pr)("(stackless)"); } else { print_args(); if (trace_flags & TRACE_SHOWFRAME_FLAG) - db_printf(" [frame 0x%x]", stack); + (*pr)(" [frame 0x%x]", stack); } - db_printf("\n"); + (*pr)("\n"); if (note) { - db_printf(" %s\n", note); + (*pr)(" %s\n", note); note = 0; } @@ -865,33 +865,33 @@ db_stack_trace_cmd2(db_regs_t *regs) unsigned value = saved_reg_value(r); if (title_printed == 0) { title_printed = 1; - db_printf("[in next func:"); + (*pr)("[in next func:"); } if (value == 0) - db_printf(" r%d", r); + (*pr)(" r%d", r); else if (value <= 9) - db_printf(" r%d=%x", r, value); + (*pr)(" r%d=%x", r, value); else - db_printf(" r%d=x%x", r, value); + (*pr)(" r%d=x%x", r, value); } } if (title_printed) - db_printf("]\n"); + (*pr)("]\n"); } - db_printf("(%d)%c", depth++, next_address_likely_wrong ? '?':' '); + (*pr)("(%d)%c", depth++, next_address_likely_wrong ? '?':' '); next_address_likely_wrong = 0; if (trace_flags & TRACE_SHOWADDRESS_FLAG) - db_printf("%08x ", where); - db_printsym(where, DB_STGY_PROC, db_printf); - where = stack_decode(where, &stack); + (*pr)("%08x ", where); + db_printsym(where, DB_STGY_PROC, pr); + where = stack_decode(where, &stack, pr); print_args(); if (trace_flags & TRACE_SHOWFRAME_FLAG) - db_printf(" [frame 0x%x]", stack); - db_printf("\n"); + (*pr)(" [frame 0x%x]", stack); + (*pr)("\n"); if (note) { - db_printf(" %s\n", note); + (*pr)(" %s\n", note); note = 0; } } while (where); @@ -905,7 +905,7 @@ db_stack_trace_cmd2(db_regs_t *regs) #ifdef TRACE_DEBUG if (DEBUGGING_ON) - db_printf("(searching for exception frame at 0x%x)\n", stack); + (*pr)("(searching for exception frame at 0x%x)\n", stack); #endif while (i) { @@ -941,7 +941,7 @@ db_stack_trace_cmd2(db_regs_t *regs) if (pair[0] != stack+8) { /* if (!badwordaddr((vm_offset_t)pair[0]) && (pair[0]!=0)) - db_printf("stack_trace:found pair 0x%x but != to stack+8\n", + (*pr)("stack_trace:found pair 0x%x but != to stack+8\n", pair[0]); */ @@ -951,14 +951,14 @@ db_stack_trace_cmd2(db_regs_t *regs) db_regs_t *frame = (db_regs_t *) pair[0]; char *cause = m88k_exception_name(frame -> vector); - db_printf("-------------- %s [EF: 0x%x] -------------\n", + (*pr)("-------------- %s [EF: 0x%x] -------------\n", cause, frame); - db_stack_trace_cmd2(frame); + db_stack_trace_cmd2(frame, pr); return; } #ifdef TRACE_DEBUG else if (DEBUGGING_ON) - db_printf("pair matched, but frame at 0x%x looks insane\n", + (*pr)("pair matched, but frame at 0x%x looks insane\n", stack+8); #endif } @@ -992,9 +992,9 @@ db_stack_trace_cmd2(db_regs_t *regs) user = *((db_regs_t **) stack); if (frame_is_sane(user) == 2) { - db_printf("---------------- %s [EF : 0x%x] -------------\n", + (*pr)("---------------- %s [EF : 0x%x] -------------\n", m88k_exception_name(user->vector), user); - db_stack_trace_cmd2(user); + db_stack_trace_cmd2(user, pr); } } } @@ -1006,10 +1006,11 @@ db_stack_trace_cmd2(db_regs_t *regs) * printed. */ void -db_stack_trace_cmd(db_regs_t *addr, +db_stack_trace_print(db_regs_t *addr, int have_addr, db_expr_t count, - char *modif) + char *modif, + int (*pr)(const char *, ...)) { enum { Default, Stack, Proc, Frame @@ -1042,25 +1043,25 @@ db_stack_trace_cmd(db_regs_t *addr, case 'F': trace_flags |= TRACE_SHOWFRAME_FLAG; break; case 'u': trace_flags |= TRACE_USER_FLAG; break; default: - db_printf("unknown trace modifier [%c]\n", modif[-1]); + (*pr)("unknown trace modifier [%c]\n", modif[-1]); /*FALLTHROUGH*/ case 'h': - db_printf("usage: trace/[MODIFIER] [ARG]\n"); - db_printf(" u = include user trace\n"); - db_printf(" F = print stack frames\n"); - db_printf(" a = show return addresses\n"); - db_printf(" p = show call-preserved registers\n"); - db_printf(" s = ARG is a stack pointer\n"); - db_printf(" f = ARG is a frame pointer\n"); + (*pr)("usage: trace/[MODIFIER] [ARG]\n"); + (*pr)(" u = include user trace\n"); + (*pr)(" F = print stack frames\n"); + (*pr)(" a = show return addresses\n"); + (*pr)(" p = show call-preserved registers\n"); + (*pr)(" s = ARG is a stack pointer\n"); + (*pr)(" f = ARG is a frame pointer\n"); #ifdef TRACE_DEBUG - db_printf(" d = trace-debugging output\n"); + (*pr)(" d = trace-debugging output\n"); #endif return; } } if (!have_addr && style != Default) { - db_printf("expecting argument with /s or /f\n"); + (*pr)("expecting argument with /s or /f\n"); return; } if (have_addr && style == Default) @@ -1089,7 +1090,7 @@ db_stack_trace_cmd(db_regs_t *addr, for (ptr = arg.num;/**/; ptr += 4) { /* Read a word from the named stack */ if (db_trace_get_val(ptr, &val1) == 0) { - db_printf("can't read from %x, aborting.\n", ptr); + (*pr)("can't read from %x, aborting.\n", ptr); return; } @@ -1105,14 +1106,14 @@ db_stack_trace_cmd(db_regs_t *addr, /* peek at the next word to see if it could be a return address */ if (db_trace_get_val(ptr, &sxip) == 0) { - db_printf("can't read from %x, aborting.\n", ptr); + (*pr)("can't read from %x, aborting.\n", ptr); return; } if (sxip == 0 || !db_trace_get_val(sxip, &val2)) continue; if (db_trace_get_val(val1, &val2) == 0) { - db_printf("can't read from %x, aborting.\n", val1); + (*pr)("can't read from %x, aborting.\n", val1); continue; } @@ -1129,13 +1130,13 @@ db_stack_trace_cmd(db_regs_t *addr, && db_trace_get_val(val1-4, &val2) && val2 == val1 && db_trace_get_val(val1-8, &val2) && val2 == val1) { /* we've found a frame, so the stack must have been good */ - db_printf("%x looks like a frame, accepting %x\n",val1,ptr); + (*pr)("%x looks like a frame, accepting %x\n",val1,ptr); break; } if (val2 > val1 && (val2 & 3) == 0) { /* well, looks close enough to be another frame pointer */ - db_printf("*%x = %x looks like a stack frame pointer, accepting %x\n", val1, val2, ptr); + (*pr)("*%x = %x looks like a stack frame pointer, accepting %x\n", val1, val2, ptr); break; } } @@ -1146,11 +1147,11 @@ db_stack_trace_cmd(db_regs_t *addr, frame.snip = frame.sxip + 4; frame.sfip = frame.snip + 4; } - db_printf("[r31=%x, %sxip=%x]\n", frame.r[31], + (*pr)("[r31=%x, %sxip=%x]\n", frame.r[31], cputyp == CPU_88110 ? "e" : "s", frame.sxip); regs = &frame; } } - db_stack_trace_cmd2(regs); + db_stack_trace_cmd2(regs, pr); } diff --git a/sys/arch/mvmeppc/ddb/db_trace.c b/sys/arch/mvmeppc/ddb/db_trace.c index 24608fd36c9..1eda17fbb62 100644 --- a/sys/arch/mvmeppc/ddb/db_trace.c +++ b/sys/arch/mvmeppc/ddb/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.1 2001/06/26 21:57:39 smurph Exp $ */ +/* $OpenBSD: db_trace.c,v 1.2 2002/05/18 09:49:17 art Exp $ */ /* * Mach Operating System @@ -89,7 +89,7 @@ db_save_regs(struct trapframe *frame) } db_expr_t -db_dumpframe (u_int32_t pframe) +db_dumpframe (u_int32_t pframe, int (*pr)(const char *, ...)) { u_int32_t nextframe; u_int32_t lr; @@ -102,7 +102,7 @@ db_dumpframe (u_int32_t pframe) access = (u_int32_t *)(pframe+4); lr = *access; - db_printf("lr %x fp %x nfp %x\n", lr, pframe, nextframe); + (*pr)("lr %x fp %x nfp %x\n", lr, pframe, nextframe); return nextframe; } @@ -110,11 +110,12 @@ db_dumpframe (u_int32_t pframe) * Frame tracing. */ void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { db_addr_t frame, lr, caller; db_expr_t diff; @@ -144,7 +145,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) lr = *(db_addr_t *)(frame + 4) - 4; if ((lr & 3) || (lr < 0x10000)) { - printf("saved LR(0x%x) is invalid.", lr); + (*pr)("saved LR(0x%x) is invalid.", lr); break; } if ((caller = (db_addr_t)vtophys(lr)) == 0) @@ -156,15 +157,15 @@ db_stack_trace_cmd(addr, have_addr, count, modif) sym = db_search_symbol(caller, DB_STGY_ANY, &diff); db_symbol_values(sym, &symname, 0); if (symname == NULL) - printf("%p ", caller); + (*pr)("%p ", caller); else - printf("%s+%x ", symname, diff); + (*pr)("%s+%x ", symname, diff); if (full) /* Print all the args stored in that stackframe. */ - printf(" (%lx, %lx, %lx, %lx, %lx, %lx, %lx, %lx) %lx ", + (*pr)(" (%lx, %lx, %lx, %lx, %lx, %lx, %lx, %lx) %lx ", args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], frame); - printf("\n"); + (*pr)("\n"); } } diff --git a/sys/arch/powerpc/powerpc/trap.c b/sys/arch/powerpc/powerpc/trap.c index 1729b29acef..4206115bf10 100644 --- a/sys/arch/powerpc/powerpc/trap.c +++ b/sys/arch/powerpc/powerpc/trap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: trap.c,v 1.48 2002/05/16 21:11:17 miod Exp $ */ +/* $OpenBSD: trap.c,v 1.49 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: trap.c,v 1.3 1996/10/13 03:31:37 christos Exp $ */ /* @@ -59,6 +59,7 @@ #include <ddb/db_extern.h> #include <ddb/db_sym.h> +#include <ddb/db_output.h> static int fix_unaligned(struct proc *p, struct trapframe *frame); int badaddr(char *addr, u_int32_t len); @@ -82,7 +83,7 @@ ppc_dumpbt(struct trapframe *frame) /* dumpframe is defined in db_trace.c */ addr=frame->fixreg[1]; while (addr != 0) { - addr = db_dumpframe(addr); + addr = db_dumpframe(addr, db_printf); } return; } diff --git a/sys/arch/sparc/sparc/db_trace.c b/sys/arch/sparc/sparc/db_trace.c index 1d8831d86dd..5af447e60b2 100644 --- a/sys/arch/sparc/sparc/db_trace.c +++ b/sys/arch/sparc/sparc/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.5 2002/05/16 13:01:41 art Exp $ */ +/* $OpenBSD: db_trace.c,v 1.6 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_trace.c,v 1.9 1997/07/29 09:42:00 fair Exp $ */ /* @@ -39,11 +39,12 @@ #define INKERNEL(va) (((vaddr_t)(va)) >= USRSTACK) void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { struct frame *frame; boolean_t kernel_only = TRUE; @@ -84,17 +85,17 @@ db_stack_trace_cmd(addr, have_addr, count, modif) if (name == NULL) name = "?"; - db_printf("%s(", name); + (*pr)("%s(", name); /* * Print %i0..%i5, hope these still reflect the * actual arguments somewhat... */ for (i=0; i < 5; i++) - db_printf("0x%x, ", frame->fr_arg[i]); - db_printf("0x%x) at ", frame->fr_arg[i]); - db_printsym(pc, DB_STGY_PROC, db_printf); - db_printf("\n"); + (*pr)("0x%x, ", frame->fr_arg[i]); + (*pr)("0x%x) at ", frame->fr_arg[i]); + db_printsym(pc, DB_STGY_PROC, pr); + (*pr)("\n"); } } diff --git a/sys/arch/sparc64/sparc64/db_trace.c b/sys/arch/sparc64/sparc64/db_trace.c index bfb21ffd743..03766c4119b 100644 --- a/sys/arch/sparc64/sparc64/db_trace.c +++ b/sys/arch/sparc64/sparc64/db_trace.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_trace.c,v 1.5 2002/05/16 13:01:41 art Exp $ */ +/* $OpenBSD: db_trace.c,v 1.6 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_trace.c,v 1.23 2001/07/10 06:06:16 eeh Exp $ */ /* @@ -56,19 +56,17 @@ void db_print_window(u_int64_t); #define ULOAD(x) probeget((paddr_t)(u_long)&(x), ASI_AIUS, sizeof(x)) void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; int have_addr; db_expr_t count; char *modif; + int (*pr)(const char *, ...); { vaddr_t frame; boolean_t kernel_only = TRUE; boolean_t trace_thread = FALSE; char c, *cp = modif; - int (*pr)(const char *, ...); - - pr = db_printf; while ((c = *cp++) != 0) { if (c == 't') diff --git a/sys/arch/vax/vax/db_machdep.c b/sys/arch/vax/vax/db_machdep.c index 931038f0829..9e91a93d769 100644 --- a/sys/arch/vax/vax/db_machdep.c +++ b/sys/arch/vax/vax/db_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_machdep.c,v 1.11 2002/03/14 01:26:48 millert Exp $ */ +/* $OpenBSD: db_machdep.c,v 1.12 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_machdep.c,v 1.17 1999/06/20 00:58:23 ragge Exp $ */ /* @@ -237,16 +237,16 @@ struct db_variable *db_eregs = db_regs + sizeof(db_regs)/sizeof(db_regs[0]); * stackbase - Lowest stack value */ static void -db_dump_stack(VAX_CALLFRAME *fp, u_int stackbase) { +db_dump_stack(VAX_CALLFRAME *fp, u_int stackbase, int (*pr)(const char *, ...)) { u_int nargs, arg_base, regs; VAX_CALLFRAME *tmp_frame; db_expr_t diff; db_sym_t sym; char *symname; - db_printf("Stack traceback : \n"); + (*pr)("Stack traceback : \n"); if (IN_USERLAND(fp)) { - db_printf(" Process is executing in user space.\n"); + (*pr)(" Process is executing in user space.\n"); return; } @@ -257,7 +257,7 @@ db_dump_stack(VAX_CALLFRAME *fp, u_int stackbase) { symname = NULL; sym = db_search_symbol(fp->vax_pc, DB_STGY_ANY, &diff); db_symbol_values(sym, &symname, 0); - db_printf("%s+0x%lx(", symname, diff); + (*pr)("%s+0x%lx(", symname, diff); /* * Figure out the arguments by using a bit of subtlety. @@ -290,12 +290,12 @@ db_dump_stack(VAX_CALLFRAME *fp, u_int stackbase) { nargs--; /* reduce by one for formatting niceties */ arg_base++; /* skip past the actual number of arguments */ while (nargs--) - db_printf("0x%x,", tmp_frame->vax_args[arg_base++]); + (*pr)("0x%x,", tmp_frame->vax_args[arg_base++]); /* now print out the last arg with closing brace and \n */ - db_printf("0x%x)\n", tmp_frame->vax_args[arg_base]); + (*pr)("0x%x)\n", tmp_frame->vax_args[arg_base]); } else - db_printf("void)\n"); + (*pr)("void)\n"); /* move to the next frame */ fp = fp->vax_fp; } @@ -310,11 +310,12 @@ db_dump_stack(VAX_CALLFRAME *fp, u_int stackbase) { * trace/t 0tnn <-- Trace process nn (0t for decimal) */ void -db_stack_trace_cmd(addr, have_addr, count, modif) +db_stack_trace_print(addr, have_addr, count, modif, pr) db_expr_t addr; /* Address parameter */ boolean_t have_addr; /* True if addr is valid */ db_expr_t count; /* Optional count */ char *modif; /* pointer to flag modifier 't' */ + int (*pr)(const char *, ...); { extern vaddr_t proc0paddr; struct proc *p = curproc; @@ -334,12 +335,12 @@ db_stack_trace_cmd(addr, have_addr, count, modif) /* Trace a panic */ if (! trace_proc) { if (! panicstr) { - db_printf("Not a panic, use trace/t to trace a process.\n"); + (*pr)("Not a panic, use trace/t to trace a process.\n"); return; } - db_printf("panic: %s\n", panicstr); + (*pr)("panic: %s\n", panicstr); /* xxx ? where did we panic and whose stack are we using? */ - db_dump_stack((VAX_CALLFRAME *)(ddb_regs.fp), ddb_regs.ap); + db_dump_stack((VAX_CALLFRAME *)(ddb_regs.fp), ddb_regs.ap, pr); return; } @@ -358,7 +359,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) while (foo != 0) { int digit = (foo >> 28) & 0xf; if (digit > 9) { - db_printf(" No such process.\n"); + (*pr)(" No such process.\n"); return; } tpid = tpid * 10 + digit; @@ -366,14 +367,14 @@ db_stack_trace_cmd(addr, have_addr, count, modif) } p = pfind(tpid); if (p == NULL) { - db_printf(" No such process.\n"); + (*pr)(" No such process.\n"); return; } } } else { p = (struct proc *)(addr); if (pfind(p->p_pid) != p) { - db_printf(" This address does not point to a valid process.\n"); + (*pr)(" This address does not point to a valid process.\n"); return; } } @@ -381,12 +382,12 @@ db_stack_trace_cmd(addr, have_addr, count, modif) if (trace_proc) { p = curproc; if (p == NULL) { - db_printf("trace: no current process! (ignored)\n"); + (*pr)("trace: no current process! (ignored)\n"); return; } } else { if (! panicstr) { - db_printf("Not a panic, no active process, ignored.\n"); + (*pr)("Not a panic, no active process, ignored.\n"); return; } } @@ -398,31 +399,31 @@ db_stack_trace_cmd(addr, have_addr, count, modif) uarea = p->p_addr; curpid = p->p_pid; } - db_printf("Process %d\n", curpid); - db_printf(" PCB contents:\n"); - db_printf(" KSP = 0x%x\n", (unsigned int)(uarea->u_pcb.KSP)); - db_printf(" ESP = 0x%x\n", (unsigned int)(uarea->u_pcb.ESP)); - db_printf(" SSP = 0x%x\n", (unsigned int)(uarea->u_pcb.SSP)); - db_printf(" USP = 0x%x\n", (unsigned int)(uarea->u_pcb.USP)); - db_printf(" R[00] = 0x%08x R[06] = 0x%08x\n", + (*pr)("Process %d\n", curpid); + (*pr)(" PCB contents:\n"); + (*pr)(" KSP = 0x%x\n", (unsigned int)(uarea->u_pcb.KSP)); + (*pr)(" ESP = 0x%x\n", (unsigned int)(uarea->u_pcb.ESP)); + (*pr)(" SSP = 0x%x\n", (unsigned int)(uarea->u_pcb.SSP)); + (*pr)(" USP = 0x%x\n", (unsigned int)(uarea->u_pcb.USP)); + (*pr)(" R[00] = 0x%08x R[06] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[0]), (unsigned int)(uarea->u_pcb.R[6])); - db_printf(" R[01] = 0x%08x R[07] = 0x%08x\n", + (*pr)(" R[01] = 0x%08x R[07] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[1]), (unsigned int)(uarea->u_pcb.R[7])); - db_printf(" R[02] = 0x%08x R[08] = 0x%08x\n", + (*pr)(" R[02] = 0x%08x R[08] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[2]), (unsigned int)(uarea->u_pcb.R[8])); - db_printf(" R[03] = 0x%08x R[09] = 0x%08x\n", + (*pr)(" R[03] = 0x%08x R[09] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[3]), (unsigned int)(uarea->u_pcb.R[9])); - db_printf(" R[04] = 0x%08x R[10] = 0x%08x\n", + (*pr)(" R[04] = 0x%08x R[10] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[4]), (unsigned int)(uarea->u_pcb.R[10])); - db_printf(" R[05] = 0x%08x R[11] = 0x%08x\n", + (*pr)(" R[05] = 0x%08x R[11] = 0x%08x\n", (unsigned int)(uarea->u_pcb.R[5]), (unsigned int)(uarea->u_pcb.R[11])); - db_printf(" AP = 0x%x\n", (unsigned int)(uarea->u_pcb.AP)); - db_printf(" FP = 0x%x\n", (unsigned int)(uarea->u_pcb.FP)); - db_printf(" PC = 0x%x\n", (unsigned int)(uarea->u_pcb.PC)); - db_printf(" PSL = 0x%x\n", (unsigned int)(uarea->u_pcb.PSL)); - db_printf(" Trap frame pointer: 0x%x\n", + (*pr)(" AP = 0x%x\n", (unsigned int)(uarea->u_pcb.AP)); + (*pr)(" FP = 0x%x\n", (unsigned int)(uarea->u_pcb.FP)); + (*pr)(" PC = 0x%x\n", (unsigned int)(uarea->u_pcb.PC)); + (*pr)(" PSL = 0x%x\n", (unsigned int)(uarea->u_pcb.PSL)); + (*pr)(" Trap frame pointer: 0x%x\n", (unsigned int)(uarea->u_pcb.framep)); - db_dump_stack((VAX_CALLFRAME *)(uarea->u_pcb.FP), (u_int) uarea->u_pcb.KSP); + db_dump_stack((VAX_CALLFRAME *)(uarea->u_pcb.FP), (u_int) uarea->u_pcb.KSP, pr); return; #if 0 while (((u_int)(cur_frame->vax_fp) > stackbase) && @@ -434,7 +435,7 @@ db_stack_trace_cmd(addr, have_addr, count, modif) symname = NULL; sym = db_search_symbol(cur_frame->vax_pc, DB_STGY_ANY, &diff); db_symbol_values(sym, &symname, 0); - db_printf("%s+0x%lx(", symname, diff); + (*pr)("%s+0x%lx(", symname, diff); /* * Figure out the arguments by using a bit of subterfuge @@ -467,12 +468,12 @@ db_stack_trace_cmd(addr, have_addr, count, modif) nargs--; /* reduce by one for formatting niceties */ arg_base++; /* skip past the actual number of arguments */ while (nargs--) - db_printf("0x%x,", tmp_frame->vax_args[arg_base++]); + (*pr)("0x%x,", tmp_frame->vax_args[arg_base++]); /* now print out the last arg with closing brace and \n */ - db_printf("0x%x)\n", tmp_frame->vax_args[++arg_base]); + (*pr)("0x%x)\n", tmp_frame->vax_args[++arg_base]); } else - db_printf("void)\n"); + (*pr)("void)\n"); /* move to the next frame */ cur_frame = cur_frame->vax_fp; } diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c index 24520db7716..d2e5ba3da11 100644 --- a/sys/ddb/db_command.c +++ b/sys/ddb/db_command.c @@ -1,4 +1,4 @@ -/* $OpenBSD: db_command.c,v 1.28 2002/03/14 03:16:03 millert Exp $ */ +/* $OpenBSD: db_command.c,v 1.29 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_command.c,v 1.20 1996/03/30 22:30:05 christos Exp $ */ /* @@ -639,3 +639,10 @@ db_boot_poweroff_cmd(addr, haddr, count, modif) { boot(RB_NOSYNC | RB_HALT | RB_POWERDOWN | RB_TIMEBAD); } + +void +db_stack_trace_cmd(db_expr_t addr, boolean_t have_addr, db_expr_t count, + char *modif) +{ + db_stack_trace_print(addr, have_addr, count, modif, db_printf); +} diff --git a/sys/ddb/db_command.h b/sys/ddb/db_command.h index 84655b6c5b2..ff38839284d 100644 --- a/sys/ddb/db_command.h +++ b/sys/ddb/db_command.h @@ -1,4 +1,4 @@ -/* $OpenBSD: db_command.h,v 1.14 2002/03/14 01:26:51 millert Exp $ */ +/* $OpenBSD: db_command.h,v 1.15 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_command.h,v 1.8 1996/02/05 01:56:55 christos Exp $ */ /* @@ -56,6 +56,7 @@ void db_boot_dump_cmd(db_expr_t, int, db_expr_t, char *); void db_boot_halt_cmd(db_expr_t, int, db_expr_t, char *); void db_boot_reboot_cmd(db_expr_t, int, db_expr_t, char *); void db_boot_poweroff_cmd(db_expr_t, int, db_expr_t, char *); +void db_stack_trace_cmd(db_expr_t, int, db_expr_t, char *); db_addr_t db_dot; /* current location */ db_addr_t db_last_addr; /* last explicit address typed */ diff --git a/sys/ddb/db_interface.h b/sys/ddb/db_interface.h index 0f3346e6a96..9d58c99feab 100644 --- a/sys/ddb/db_interface.h +++ b/sys/ddb/db_interface.h @@ -1,4 +1,4 @@ -/* $OpenBSD: db_interface.h,v 1.4 2002/03/14 01:26:51 millert Exp $ */ +/* $OpenBSD: db_interface.h,v 1.5 2002/05/18 09:49:17 art Exp $ */ /* $NetBSD: db_interface.h,v 1.1 1996/02/05 01:57:03 christos Exp $ */ /* @@ -33,7 +33,8 @@ #define _DDB_DB_INTERFACE_H_ /* arch/<arch>/<arch>/db_trace.c */ -void db_stack_trace_cmd(db_expr_t, int, db_expr_t, char *); +void db_stack_trace_print(db_expr_t, int, db_expr_t, char *, + int (*)(const char *, ...)); /* arch/<arch>/<arch>/db_disasm.c */ db_addr_t db_disasm(db_addr_t, boolean_t); |