Module Name:    src
Committed By:   mrg
Date:           Wed Apr 13 03:32:29 UTC 2011

Modified Files:
        src/sys/arch/sparc64/sparc64: db_trace.c

Log Message:
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().


To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/sparc64/sparc64/db_trace.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/sparc64/sparc64/db_trace.c
diff -u src/sys/arch/sparc64/sparc64/db_trace.c:1.45 src/sys/arch/sparc64/sparc64/db_trace.c:1.46
--- src/sys/arch/sparc64/sparc64/db_trace.c:1.45	Wed Apr 13 03:29:03 2011
+++ src/sys/arch/sparc64/sparc64/db_trace.c	Wed Apr 13 03:32:28 2011
@@ -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);
 	}
 
 }

Reply via email to