summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorart <art@openbsd.org>2002-05-18 09:49:16 +0000
committerart <art@openbsd.org>2002-05-18 09:49:16 +0000
commit332a70d350968331aa265465817ca5a3db75e44c (patch)
tree06d6060f2039b51974696206d2e47258d302a2fc /sys
parentwhen detaching form a process don't forget to remove posted messages. (diff)
downloadwireguard-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.
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/alpha/alpha/db_trace.c27
-rw-r--r--sys/arch/hppa/hppa/db_interface.c25
-rw-r--r--sys/arch/i386/i386/db_trace.c43
-rw-r--r--sys/arch/m68k/m68k/db_trace.c19
-rw-r--r--sys/arch/macppc/include/db_machdep.h4
-rw-r--r--sys/arch/macppc/macppc/db_trace.c11
-rw-r--r--sys/arch/mvme88k/ddb/db_trace.c131
-rw-r--r--sys/arch/mvmeppc/ddb/db_trace.c19
-rw-r--r--sys/arch/powerpc/powerpc/trap.c5
-rw-r--r--sys/arch/sparc/sparc/db_trace.c15
-rw-r--r--sys/arch/sparc64/sparc64/db_trace.c8
-rw-r--r--sys/arch/vax/vax/db_machdep.c79
-rw-r--r--sys/ddb/db_command.c9
-rw-r--r--sys/ddb/db_command.h3
-rw-r--r--sys/ddb/db_interface.h5
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);