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