Index: include/Makefile =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/include/Makefile,v retrieving revision 1.25 diff -p -r1.25 Makefile *** include/Makefile 31 Jan 2011 00:19:34 -0000 1.25 --- include/Makefile 12 Apr 2011 08:51:52 -0000 *************** INCS= ansi.h aout_machdep.h asm.h autoco *** 8,14 **** disklabel.h \ eeprom.h elf_machdep.h endian.h endian_machdep.h \ fenv.h float.h frame.h fsr.h \ ! idprom.h ieee.h ieeefp.h instr.h \ int_const.h int_fmtio.h int_limits.h int_mwgwtypes.h int_types.h \ joystick.h \ kbd.h kbio.h kcore.h \ --- 8,14 ---- disklabel.h \ eeprom.h elf_machdep.h endian.h endian_machdep.h \ fenv.h float.h frame.h fsr.h \ ! idprom.h ieee.h ieeefp.h instr.h intr.h \ int_const.h int_fmtio.h int_limits.h int_mwgwtypes.h int_types.h \ joystick.h \ kbd.h kbio.h kcore.h \ Index: include/cpu.h =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/include/cpu.h,v retrieving revision 1.94 diff -p -r1.94 cpu.h *** include/cpu.h 24 Jan 2011 10:04:28 -0000 1.94 --- include/cpu.h 12 Apr 2011 08:51:52 -0000 *************** *** 52,58 **** #define CPU_ARCH 4 /* integer: cpu architecture version */ #define CPU_MAXID 5 /* number of valid machdep ids */ ! #ifdef _KERNEL /* * Exported definitions unique to SPARC cpu support. */ --- 52,58 ---- #define CPU_ARCH 4 /* integer: cpu architecture version */ #define CPU_MAXID 5 /* number of valid machdep ids */ ! #if defined(_KERNEL) || defined(_KMEMUSER) /* * Exported definitions unique to SPARC cpu support. */ *************** *** 66,76 **** #include #include #include #include ! #include #include #include /* * The cpu_info structure is part of a 64KB structure mapped both the kernel * pmap and a single locked TTE a CPUINFO_VA for that particular processor. --- 66,78 ---- #include #include #include + #if defined(_KERNEL) #include ! #endif #include #include + /* * The cpu_info structure is part of a 64KB structure mapped both the kernel * pmap and a single locked TTE a CPUINFO_VA for that particular processor. *************** struct cpu_info { *** 172,177 **** --- 174,183 ---- volatile void *ci_ddb_regs; /* DDB regs */ }; + #endif /* _KERNEL || _KMEMUSER */ + + #ifdef _KERNEL + #define CPUF_PRIMARY 1 /* *************** void kgdb_panic(void); *** 381,385 **** --- 387,401 ---- int fixalign(struct lwp *, struct trapframe64 *); int emulinstr(vaddr_t, struct trapframe64 *); + #else /* _KERNEL */ + + /* + * XXX: provide some definitions for crash(8), probably can share + */ + #if defined(_KMEMUSER) + #define curcpu() (((struct cpu_info *)CPUINFO_VA)->ci_self) + #define curlwp curcpu()->ci_curlwp + #endif + #endif /* _KERNEL */ #endif /* _CPU_H_ */ Index: include/db_machdep.h =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/include/db_machdep.h,v retrieving revision 1.28 diff -p -r1.28 db_machdep.h *** include/db_machdep.h 11 Apr 2011 10:41:17 -0000 1.28 --- include/db_machdep.h 12 Apr 2011 08:51:52 -0000 *************** *** 33,38 **** --- 33,40 ---- * Machine-dependent defines for new kernel debugger. */ + #include + #include #include Index: include/intr.h =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/include/intr.h,v retrieving revision 1.29 diff -p -r1.29 intr.h *** include/intr.h 24 May 2010 09:49:17 -0000 1.29 --- include/intr.h 12 Apr 2011 08:51:52 -0000 *************** *** 32,37 **** --- 32,39 ---- #ifndef _SPARC64_INTR_H_ #define _SPARC64_INTR_H_ + #ifdef _KERNEL + #if defined(_KERNEL_OPT) #include "opt_multiprocessor.h" #endif *************** void mp_resume_cpu(int); *** 76,81 **** --- 78,85 ---- #endif /* _LOCORE */ #endif + #endif /* _KERNEL */ + #define IPI_EVCNT_TLB_PTE 0 #define IPI_EVCNT_FPU_SYNCH 1 #define IPI_EVCNT_FPU_FLUSH 2 Index: sparc64/db_disasm.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/db_disasm.c,v retrieving revision 1.15 diff -p -r1.15 db_disasm.c *** sparc64/db_disasm.c 25 Nov 2008 15:41:12 -0000 1.15 --- sparc64/db_disasm.c 12 Apr 2011 08:51:53 -0000 *************** __KERNEL_RCSID(0, "$NetBSD: db_disasm.c, *** 39,48 **** --- 39,53 ---- #include #include #include + #include #include #include #include + #ifndef _KERNEL + #include + #endif + #ifndef V9 #define V9 #endif Index: sparc64/db_interface.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/db_interface.c,v retrieving revision 1.126 diff -p -r1.126 db_interface.c *** sparc64/db_interface.c 14 Jan 2011 02:06:32 -0000 1.126 --- sparc64/db_interface.c 12 Apr 2011 08:51:53 -0000 *************** *** 36,43 **** --- 36,45 ---- #include __KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.126 2011/01/14 02:06:32 rmind Exp $"); + #ifdef _KERNEL_OPT #include "opt_ddb.h" #include "opt_multiprocessor.h" + #endif #include #include *************** __KERNEL_RCSID(0, "$NetBSD: db_interface *** 53,58 **** --- 55,61 ---- #include #include #include + #include #include #include #include *************** __KERNEL_RCSID(0, "$NetBSD: db_interface *** 61,72 **** --- 64,83 ---- #include #include + #ifdef _KERNEL #include + #endif #include #include #include + #include + #ifdef _KERNEL #include "fb.h" + #else + #include + #include + #endif extern struct traptrace { unsigned short tl:3, /* Trap level */ *************** kdb_trap(int type, struct trapframe64 *t *** 491,502 **** s = splhigh(); db_active++; ! cnpollc(TRUE); /* Need to do spl stuff till cnpollc works */ db_dump_ts(0, 0, 0, 0); db_trap(type, 0/*code*/); ddb_restore_state(); ! cnpollc(FALSE); db_active--; splx(s); --- 502,513 ---- s = splhigh(); db_active++; ! cnpollc(true); /* Need to do spl stuff till cnpollc works */ db_dump_ts(0, 0, 0, 0); db_trap(type, 0/*code*/); ddb_restore_state(); ! cnpollc(false); db_active--; splx(s); *************** kdb_trap(int type, struct trapframe64 *t *** 515,520 **** --- 526,532 ---- } #endif /* DDB */ + #ifdef _KERNEL /* * Read bytes from kernel address space for debugger. */ *************** db_write_bytes(db_addr_t addr, size_t si *** 556,561 **** --- 568,574 ---- } } + #endif #ifdef DDB void *************** const struct db_command db_machine_comma *** 1306,1311 **** --- 1319,1331 ---- { DDB_ADD_CMD(NULL, NULL, 0, NULL,NULL,NULL) } }; + #else /* DDB */ + + /* XXX */ + const struct db_command db_machine_command_table[] = { + { DDB_ADD_CMD(NULL, NULL, 0, NULL,NULL,NULL) } + }; + #endif /* DDB */ /* *************** db_branch_taken(int inst, db_addr_t pc, *** 1358,1364 **** default: /* not a branch */ ! panic("branch_taken() on non-branch"); } } --- 1378,1385 ---- default: /* not a branch */ ! printf("branch_taken() on non-branch"); ! return pc; } } *************** db_inst_branch(int inst) *** 1370,1376 **** insn.i_int = inst; if (insn.i_any.i_op != IOP_OP2) ! return FALSE; switch (insn.i_op2.i_op2) { case IOP2_BPcc: --- 1391,1397 ---- insn.i_int = inst; if (insn.i_any.i_op != IOP_OP2) ! return false; switch (insn.i_op2.i_op2) { case IOP2_BPcc: *************** db_inst_branch(int inst) *** 1379,1388 **** case IOP2_FBPfcc: case IOP2_FBfcc: case IOP2_CBccc: ! return TRUE; default: ! return FALSE; } } --- 1400,1409 ---- case IOP2_FBPfcc: case IOP2_FBfcc: case IOP2_CBccc: ! return true; default: ! return false; } } *************** db_inst_call(int inst) *** 1396,1408 **** switch (insn.i_any.i_op) { case IOP_CALL: ! return TRUE; case IOP_reg: return (insn.i_op3.i_op3 == IOP3_JMPL) && !db_inst_return(inst); default: ! return FALSE; } } --- 1417,1429 ---- switch (insn.i_any.i_op) { case IOP_CALL: ! return true; case IOP_reg: return (insn.i_op3.i_op3 == IOP3_JMPL) && !db_inst_return(inst); default: ! return false; } } *************** db_inst_unconditional_flow_transfer(int *** 1415,1424 **** insn.i_int = inst; if (db_inst_call(inst)) ! return TRUE; if (insn.i_any.i_op != IOP_OP2) ! return FALSE; switch (insn.i_op2.i_op2) { --- 1436,1445 ---- insn.i_int = inst; if (db_inst_call(inst)) ! return true; if (insn.i_any.i_op != IOP_OP2) ! return false; switch (insn.i_op2.i_op2) { *************** db_inst_unconditional_flow_transfer(int *** 1430,1436 **** return insn.i_branch.i_cond == Icc_A; default: ! return FALSE; } } --- 1451,1457 ---- return insn.i_branch.i_cond == Icc_A; default: ! return false; } } Index: sparc64/db_trace.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc64/sparc64/db_trace.c,v retrieving revision 1.44 diff -p -r1.44 db_trace.c *** sparc64/db_trace.c 1 Jul 2010 02:38:27 -0000 1.44 --- sparc64/db_trace.c 12 Apr 2011 08:51:53 -0000 *************** __KERNEL_RCSID(0, "$NetBSD: db_trace.c,v *** 32,37 **** --- 32,38 ---- #include #include + #include #include #include #include *************** __KERNEL_RCSID(0, "$NetBSD: db_trace.c,v *** 41,46 **** --- 42,51 ---- #include #include + #ifndef _KERNEL + #include + #endif + void db_print_window(uint64_t); #if 0 *************** void db_print_window(uint64_t); *** 49,56 **** #define INKERNEL(va) 1 /* Everything's in the kernel now. 8^) */ #endif #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)) void db_stack_trace_print(addr, have_addr, count, modif, pr) --- 54,74 ---- #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)) ! #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) *************** db_stack_trace_print(addr, have_addr, co *** 61,81 **** void (*pr) (const char *, ...); { vaddr_t frame; ! bool kernel_only = TRUE; ! bool trace_thread = FALSE; ! bool lwpaddr = FALSE; char c; const char *cp = modif; while ((c = *cp++) != 0) { if (c == 'a') { ! lwpaddr = TRUE; ! trace_thread = TRUE; } if (c == 't') ! trace_thread = TRUE; if (c == 'u') ! kernel_only = FALSE; } if (!have_addr) --- 79,99 ---- void (*pr) (const char *, ...); { vaddr_t frame; ! bool kernel_only = true; ! bool trace_thread = false; ! bool lwpaddr = false; char c; const char *cp = modif; while ((c = *cp++) != 0) { if (c == 'a') { ! lwpaddr = true; ! trace_thread = true; } if (c == 't') ! trace_thread = true; if (c == 'u') ! kernel_only = false; } if (!have_addr) *************** db_stack_trace_print(addr, have_addr, co *** 91,96 **** --- 109,115 ---- (*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"); *************** db_stack_trace_print(addr, have_addr, co *** 98,103 **** --- 117,127 ---- } 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); *************** db_print_window(uint64_t frame) *** 255,261 **** 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); db_printsym(f->fr_pc, DB_STGY_PROC, db_printf); db_printf("\n"); } else { --- 279,285 ---- 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], (unsigned)(uintptr_t)f->fr_fp, f->fr_pc); db_printsym(f->fr_pc, DB_STGY_PROC, db_printf); db_printf("\n"); } else { *************** db_print_window(uint64_t frame) *** 272,278 **** 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); } } } --- 296,302 ---- f->fr_arg[0], f->fr_arg[1], f->fr_arg[2], f->fr_arg[3], f->fr_arg[4], f->fr_arg[5], ! (unsigned)(uintptr_t)f->fr_fp, f->fr_pc); } } } *************** db_dump_stack(db_expr_t addr, bool have_ *** 282,294 **** { int i; uint64_t frame, oldframe; ! bool kernel_only = TRUE; char c; const char *cp = modif; while ((c = *cp++) != 0) if (c == 'u') ! kernel_only = FALSE; if (count == -1) count = 65535; --- 306,318 ---- { int i; uint64_t frame, oldframe; ! bool kernel_only = true; char c; const char *cp = modif; while ((c = *cp++) != 0) if (c == 'u') ! kernel_only = false; if (count == -1) count = 65535; *************** db_dump_ts(db_expr_t addr, bool have_add *** 513,521 **** ts = &DDB_REGS->db_ts[0]; tl = DDB_REGS->db_tl; for (i=0; idb_ts[0]; tl = DDB_REGS->db_tl; for (i=0; i