Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/sparc64/sparc64 port to userspace. needs <stdbool....
details: https://anonhg.NetBSD.org/src/rev/e2175530388b
branches: trunk
changeset: 764166:e2175530388b
user: mrg <mrg%NetBSD.org@localhost>
date: Wed Apr 13 03:32:28 2011 +0000
description:
port to userspace. needs <stdbool.h>, <sys/cpu.h>. delete unused
ULOAD(). implement KLOAD() in terms of db_read_bytes() in userspace.
can't use proc_find_raw() in userspace; disable this functionality
for now. use db_printf().
diffstat:
sys/arch/sparc64/sparc64/db_trace.c | 40 +++++++++++++++++++++++++++++-------
1 files changed, 32 insertions(+), 8 deletions(-)
diffs (107 lines):
diff -r 7ee6d87fe919 -r e2175530388b sys/arch/sparc64/sparc64/db_trace.c
--- a/sys/arch/sparc64/sparc64/db_trace.c Wed Apr 13 03:29:03 2011 +0000
+++ b/sys/arch/sparc64/sparc64/db_trace.c Wed Apr 13 03:32:28 2011 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: db_trace.c,v 1.45 2011/04/13 03:29:03 mrg Exp $ */
+/* $NetBSD: db_trace.c,v 1.46 2011/04/13 03:32:28 mrg Exp $ */
/*
* Copyright (c) 1996-2002 Eduardo Horvath. All rights reserved.
@@ -28,10 +28,11 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.45 2011/04/13 03:29:03 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: db_trace.c,v 1.46 2011/04/13 03:32:28 mrg Exp $");
#include <sys/param.h>
#include <sys/proc.h>
+#include <sys/cpu.h>
#include <sys/systm.h>
#include <machine/db_machdep.h>
#include <machine/ctlreg.h>
@@ -41,6 +42,10 @@
#include <ddb/db_interface.h>
#include <ddb/db_output.h>
+#ifndef _KERNEL
+#include <stdbool.h>
+#endif
+
void db_print_window(uint64_t);
#if 0
@@ -49,8 +54,21 @@
#define INKERNEL(va) 1 /* Everything's in the kernel now. 8^) */
#endif
+#ifdef _KERNEL
#define KLOAD(x) probeget((paddr_t)(u_long)&(x), ASI_PRIMARY, sizeof(x))
-#define ULOAD(x) probeget((paddr_t)(u_long)&(x), ASI_AIUS, sizeof(x))
+#else
+static long
+kload(db_addr_t addr)
+{
+ long val;
+
+ db_read_bytes(addr, sizeof val, (char *)&val);
+
+ return val;
+}
+#define KLOAD(x) kload((db_addr_t)(u_long)&(x))
+#define frame32 frame /* XXX */
+#endif
void
db_stack_trace_print(addr, have_addr, count, modif, pr)
@@ -91,6 +109,7 @@
(*pr)("trace: pid %d ", p->p_pid);
} else {
(*pr)("trace: pid %d ", (int)addr);
+#ifdef _KERNEL
p = proc_find_raw(addr);
if (p == NULL) {
(*pr)("not found\n");
@@ -98,6 +117,11 @@
}
l = LIST_FIRST(&p->p_lwps);
KASSERT(l != NULL);
+#else
+ (*pr)("no proc_find_raw() in crash\n");
+ return;
+
+#endif
}
(*pr)("lid %d ", l->l_lid);
pcb = lwp_getpcb(l);
@@ -255,7 +279,7 @@
f->fr_local[4], f->fr_local[5], f->fr_local[6], f->fr_local[7]);
db_printf("%8x %8x %8x %8x %8x %8x %8x=sp %8x=pc:",
f->fr_arg[0], f->fr_arg[1], f->fr_arg[2], f->fr_arg[3],
- f->fr_arg[4], f->fr_arg[5], f->fr_fp, f->fr_pc);
+ f->fr_arg[4], f->fr_arg[5], (unsigned)(uintptr_t)f->fr_fp, f->fr_pc);
db_printsym(f->fr_pc, DB_STGY_PROC, db_printf);
db_printf("\n");
} else {
@@ -272,7 +296,7 @@
f->fr_arg[0], f->fr_arg[1],
f->fr_arg[2], f->fr_arg[3],
f->fr_arg[4], f->fr_arg[5],
- f->fr_fp, f->fr_pc);
+ (unsigned)(uintptr_t)f->fr_fp, f->fr_pc);
}
}
}
@@ -513,9 +537,9 @@
ts = &DDB_REGS->db_ts[0];
tl = DDB_REGS->db_tl;
for (i=0; i<tl; i++) {
- printf("%d tt=%lx tstate=%lx tpc=%p tnpc=%p\n",
- i+1, (long)ts[i].tt, (u_long)ts[i].tstate,
- (void*)(u_long)ts[i].tpc, (void*)(u_long)ts[i].tnpc);
+ db_printf("%d tt=%lx tstate=%lx tpc=%p tnpc=%p\n",
+ i+1, (long)ts[i].tt, (u_long)ts[i].tstate,
+ (void*)(u_long)ts[i].tpc, (void*)(u_long)ts[i].tnpc);
}
}
Home |
Main Index |
Thread Index |
Old Index