Module Name: src
Committed By: matt
Date: Fri Aug 21 17:45:19 UTC 2009
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: trap.c
Log Message:
Use PRIxVADDR
Stop casting l_md.md_regs
Cleanup code.
curlwp is never NULL anymore.
To generate a diff of this commit:
cvs rdiff -u -r1.217.12.1 -r1.217.12.2 src/sys/arch/mips/mips/trap.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/mips/mips/trap.c
diff -u src/sys/arch/mips/mips/trap.c:1.217.12.1 src/sys/arch/mips/mips/trap.c:1.217.12.2
--- src/sys/arch/mips/mips/trap.c:1.217.12.1 Thu Aug 20 04:36:05 2009
+++ src/sys/arch/mips/mips/trap.c Fri Aug 21 17:45:19 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.217.12.1 2009/08/20 04:36:05 uebayasi Exp $ */
+/* $NetBSD: trap.c,v 1.217.12.2 2009/08/21 17:45:19 matt Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -78,7 +78,7 @@
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.217.12.1 2009/08/20 04:36:05 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.217.12.2 2009/08/21 17:45:19 matt Exp $");
#include "opt_cputype.h" /* which mips CPU levels do we support? */
#include "opt_ddb.h"
@@ -122,7 +122,7 @@
#include <sys/kgdb.h>
#endif
-const char *trap_type[] = {
+const char * const trap_type[] = {
"external interrupt",
"TLB modification",
"TLB miss (load or instr. fetch)",
@@ -161,8 +161,8 @@
void ast(unsigned int);
vaddr_t MachEmulateBranch(struct frame *, vaddr_t, unsigned int, int); /* XXX */
-void MachEmulateInst(u_int32_t, u_int32_t, vaddr_t, struct frame *); /* XXX */
-void MachFPTrap(u_int32_t, u_int32_t, vaddr_t, struct frame *); /* XXX */
+void MachEmulateInst(uint32_t, uint32_t, vaddr_t, struct frame *); /* XXX */
+void MachFPTrap(uint32_t, uint32_t, vaddr_t, struct frame *); /* XXX */
#define DELAYBRANCH(x) ((int)(x)<0)
@@ -174,7 +174,7 @@
child_return(void *arg)
{
struct lwp *l = arg;
- struct frame *frame = (struct frame *)l->l_md.md_regs;
+ struct frame *frame = l->l_md.md_regs;
frame->f_regs[_R_V0] = 0;
frame->f_regs[_R_V1] = 1;
@@ -232,17 +232,15 @@
printf("trap: %s in %s mode\n",
trap_type[TRAPTYPE(cause)],
USERMODE(status) ? "user" : "kernel");
- printf("status=0x%x, cause=0x%x, epc=%#lx, vaddr=%#lx\n",
- status, cause, opc, vaddr);
- if (curlwp != NULL) {
- fp = (struct frame *)l->l_md.md_regs;
- printf("pid=%d cmd=%s usp=0x%x ",
- p->p_pid, p->p_comm, (int)fp->f_regs[_R_SP]);
- } else
- printf("curlwp == NULL ");
- printf("ksp=%p\n", &status);
+ printf("status=0x%x, cause=0x%x, epc=%#" PRIxVADDR
+ ", vaddr=%#" PRIxVADDR "\n", status, cause, opc, vaddr);
+ fp = l->l_md.md_regs;
+ printf("pid=%d cmd=%s usp=%#" PRIxREGISTER
+ " ksp=%p ra=%#" PRIxREGISTER "\n",
+ p->p_pid, p->p_comm, fp->f_regs[_R_SP],
+ &status, fp->f_regs[_R_RA]);
#if defined(DDB)
- kdb_trap(type, (mips_reg_t *) frame);
+ kdb_trap(type, frame->tf_regs);
/* XXX force halt XXX */
#elif defined(KGDB)
{
@@ -260,7 +258,7 @@
db_set_ddb_regs(type, (mips_reg_t *) frame);
PC_BREAK_ADVANCE(f);
if (kgdb_trap(type, &ddb_regs)) {
- ((mips_reg_t *)frame)[21] = f->f_regs[_R_PC];
+ frame->tf_regs[TF_EPC] = f->f_regs[_R_PC];
return;
}
}
@@ -290,9 +288,9 @@
MachTLBUpdate(vaddr, entry);
pa = mips_tlbpfn_to_paddr(entry);
if (!IS_VM_PHYSADDR(pa)) {
- printf("ktlbmod: va %#lx pa %#llx\n",
- vaddr, (long long)pa);
- panic("ktlbmod: unmanaged page");
+ panic("ktlbmod: unmanaged page:"
+ " va %#" PRIxVADDR " pa %#"PRIxPADDR,
+ vaddr, pa);
}
pmap_set_modified(pa);
return; /* KERN */
@@ -325,9 +323,9 @@
MachTLBUpdate(vaddr, entry);
pa = mips_tlbpfn_to_paddr(entry);
if (!IS_VM_PHYSADDR(pa)) {
- printf("utlbmod: va %#lx pa %#llx\n",
- vaddr, (long long)pa);
- panic("utlbmod: unmanaged page");
+ panic("utlbmod: unmanaged page:"
+ " va %#"PRIxVADDR" pa %#"PRIxPADDR,
+ vaddr, pa);
}
pmap_set_modified(pa);
if (type & T_USER)
@@ -347,7 +345,7 @@
goto dopanic;
/* check for fuswintr() or suswintr() getting a page fault */
if (l->l_addr->u_pcb.pcb_onfault == (void *)fswintrberr) {
- frame->tf_regs[TF_EPC] = (int)fswintrberr;
+ frame->tf_regs[TF_EPC] = (intptr_t)fswintrberr;
return; /* KERN */
}
goto pagefault;
@@ -378,8 +376,9 @@
rv = uvm_fault(map, va, ftype);
#ifdef VMFAULT_TRACE
printf(
- "uvm_fault(%p (pmap %p), %lx (0x%x), %d) -> %d at pc %p\n",
- map, vm->vm_map.pmap, va, vaddr, ftype, rv, (void*)opc);
+ "uvm_fault(%p (pmap %p), %#"PRIxVADDR
+ " (0x%x), %d) -> %d at pc %#"PRIxVADDR"\n",
+ map, vm->vm_map.pmap, va, vaddr, ftype, rv, opc);
#endif
/*
* If this was a stack access we keep track of the maximum
@@ -522,8 +521,9 @@
mips_dcache_wbinv_all(); /* XXXJRT -- necessary? */
if (rv < 0)
- printf("Warning: can't restore instruction at 0x%lx: 0x%x\n",
- l->l_md.md_ss_addr, l->l_md.md_ss_instr);
+ printf("Warning: can't restore instruction"
+ " at %#"PRIxVADDR": 0x%x\n",
+ l->l_md.md_ss_addr, l->l_md.md_ss_instr);
l->l_md.md_ss_addr = 0;
ksi.ksi_trap = type & ~T_USER;
ksi.ksi_signo = SIGTRAP;
@@ -537,7 +537,7 @@
if ((cause & MIPS_CR_COP_ERR) == 0x10000000) {
struct frame *f;
- f = (struct frame *)l->l_md.md_regs;
+ f = l->l_md.md_regs;
savefpregs(fpcurlwp); /* yield FPA */
loadfpregs(l); /* load FPA */
fpcurlwp = l;
@@ -562,12 +562,12 @@
case T_TRAP+T_USER:
ksi.ksi_trap = type & ~T_USER;
ksi.ksi_signo = SIGFPE;
- fp = (struct frame *)l->l_md.md_regs;
+ fp = l->l_md.md_regs;
ksi.ksi_addr = (void *)(intptr_t)fp->f_regs[_R_PC];
ksi.ksi_code = FPE_FLTOVF; /* XXX */
break; /* SIGNAL */
}
- fp = (struct frame *)l->l_md.md_regs;
+ fp = l->l_md.md_regs;
fp->f_regs[_R_CAUSE] = cause;
fp->f_regs[_R_BADVADDR] = vaddr;
(*p->p_emul->e_trapsignal)(l, &ksi);
@@ -616,13 +616,13 @@
int
mips_singlestep(struct lwp *l)
{
- struct frame *f = (struct frame *)l->l_md.md_regs;
+ struct frame *f = l->l_md.md_regs;
struct proc *p = l->l_proc;
vaddr_t pc, va;
int rv;
if (l->l_md.md_ss_addr) {
- printf("SS %s (%d): breakpoint already set at %lx\n",
+ printf("SS %s (%d): breakpoint already set at %#"PRIxVADDR"\n",
p->p_comm, p->p_pid, l->l_md.md_ss_addr);
return EFAULT;
}
@@ -676,7 +676,7 @@
int rc;
if (addr & 3) {
- printf("kdbpeek: unaligned address %lx\n", addr);
+ printf("kdbpeek: unaligned address %#"PRIxVADDR"\n", addr);
/* We might have been called from DDB, so do not go there. */
stacktrace();
rc = -1 ;
@@ -695,7 +695,7 @@
mips_reg_t rc;
if (addr & (sizeof(mips_reg_t) - 1)) {
- printf("kdbrpeek: unaligned address %lx\n", addr);
+ printf("kdbrpeek: unaligned address %#"PRIxVADDR"\n", addr);
/* We might have been called from DDB, so do not go there. */
stacktrace();
rc = -1 ;
@@ -727,8 +727,8 @@
/* forward */
const char *fn_name(vaddr_t addr);
-void stacktrace_subr(int, int, int, int, u_int, u_int, u_int, u_int,
- void (*)(const char*, ...));
+void stacktrace_subr(mips_reg_t, mips_reg_t, mips_reg_t, mips_reg_t,
+ vaddr_t, vaddr_t, vaddr_t, vaddr_t, void (*)(const char*, ...));
#define MIPS_JR_RA 0x03e00008 /* instruction code for jr ra */
#define MIPS_JR_K0 0x03400008 /* instruction code for jr k0 */
@@ -740,8 +740,8 @@
* the console, or both.
*/
void
-stacktrace_subr(int a0, int a1, int a2, int a3,
- u_int pc, u_int sp, u_int fp, u_int ra,
+stacktrace_subr(mips_reg_t a0, mips_reg_t a1, mips_reg_t a2, mips_reg_t a3,
+ vaddr_t pc, vaddr_t sp, vaddr_t fp, vaddr_t ra,
void (*printfn)(const char*, ...))
{
vaddr_t va, subr;
@@ -1008,7 +1008,7 @@
for (i = 0; names[i].name; i++)
if (names[i].addr == (void*)addr)
return (names[i].name);
- sprintf(buf, "%lx", addr);
+ sprintf(buf, "%#"PRIxVADDR, addr);
return (buf);
}