svn commit: r196265 - projects/mips/sys/mips/mips

Warner Losh imp at FreeBSD.org
Sat Aug 15 22:48:10 UTC 2009


Author: imp
Date: Sat Aug 15 22:48:09 2009
New Revision: 196265
URL: http://svn.freebsd.org/changeset/base/196265

Log:
  Various 32/64-bit confusion cleanups.

Modified:
  projects/mips/sys/mips/mips/trap.c

Modified: projects/mips/sys/mips/mips/trap.c
==============================================================================
--- projects/mips/sys/mips/mips/trap.c	Sat Aug 15 22:45:46 2009	(r196264)
+++ projects/mips/sys/mips/mips/trap.c	Sat Aug 15 22:48:09 2009	(r196265)
@@ -98,7 +98,6 @@ __FBSDID("$FreeBSD$");
 
 #ifdef TRAP_DEBUG
 int trap_debug = 1;
-
 #endif
 
 extern unsigned onfault_table[];
@@ -251,7 +250,7 @@ extern void MipsSwitchFPState(struct thr
 extern void MipsFPTrap(u_int, u_int, u_int);
 
 u_int trap(struct trapframe *);
-u_int MipsEmulateBranch(struct trapframe *, int, int, u_int);
+u_int MipsEmulateBranch(struct trapframe *, uintptr_t, int, uintptr_t);
 
 #define	KERNLAND(x) ((int)(x) < 0)
 #define	DELAYBRANCH(x) ((int)(x) < 0)
@@ -260,7 +259,6 @@ u_int MipsEmulateBranch(struct trapframe
  * kdbpeekD(addr) - skip one word starting at 'addr', then read the second word
  */
 #define	kdbpeekD(addr)	kdbpeek(((int *)(addr)) + 1)
-int rrs_debug = 0;
 
 /*
  * MIPS load/store access type
@@ -305,8 +303,7 @@ extern char *syscallnames[];
  * p->p_addr->u_pcb.pcb_onfault is set, otherwise, return old pc.
  */
 u_int
-trap(trapframe)
-	struct trapframe *trapframe;
+trap(struct trapframe *trapframe)
 {
 	int type, usermode;
 	int i = 0;
@@ -848,7 +845,7 @@ dofault:
 
 	case T_BREAK + T_USER:
 		{
-			unsigned int va, instr;
+			uintptr_t va, instr;
 
 			/* compute address of break instruction */
 			va = trapframe->pc;
@@ -881,13 +878,13 @@ dofault:
 	case T_IWATCH + T_USER:
 	case T_DWATCH + T_USER:
 		{
-			unsigned int va;
+			uintptr_t va;
 
 			/* compute address of trapped instruction */
 			va = trapframe->pc;
 			if (DELAYBRANCH(trapframe->cause))
 				va += sizeof(int);
-			printf("watch exception @ 0x%x\n", va);
+			printf("watch exception @ %p\n", (void *)va);
 			i = SIGTRAP;
 			addr = va;
 			break;
@@ -895,7 +892,7 @@ dofault:
 
 	case T_TRAP + T_USER:
 		{
-			unsigned int va, instr;
+			uintptr_t va, instr;
 			struct trapframe *locr0 = td->td_frame;
 
 			/* compute address of trap instruction */
@@ -1090,26 +1087,26 @@ trapDump(char *msg)
  * Return the resulting PC as if the branch was executed.
  */
 u_int
-MipsEmulateBranch(struct trapframe *framePtr, int instPC, int fpcCSR,
-    u_int instptr)
+MipsEmulateBranch(struct trapframe *framePtr, uintptr_t instPC, int fpcCSR,
+    uintptr_t instptr)
 {
 	InstFmt inst;
 	register_t *regsPtr = (register_t *) framePtr;
-	unsigned retAddr = 0;
+	uintptr_t retAddr = 0;
 	int condition;
 
 #define	GetBranchDest(InstPtr, inst) \
-	((unsigned)InstPtr + 4 + ((short)inst.IType.imm << 2))
+	(InstPtr + 4 + ((short)inst.IType.imm << 2))
 
 
 	if (instptr) {
 		if (instptr < MIPS_KSEG0_START)
-			inst.word = fuword((void *)instptr);
+			inst.word = fuword32((void *)instptr);
 		else
 			inst = *(InstFmt *) instptr;
 	} else {
 		if ((vm_offset_t)instPC < MIPS_KSEG0_START)
-			inst.word = fuword((void *)instPC);
+			inst.word = fuword32((void *)instPC);
 		else
 			inst = *(InstFmt *) instPC;
 	}
@@ -1249,7 +1246,7 @@ MipsEmulateBranch(struct trapframe *fram
  */
 #define	MIPS_END_OF_FUNCTION(ins)	((ins) == 0x03e00008)
 /* forward */
-char *fn_name(unsigned addr);
+static char *fn_name(uintptr_t addr);
 
 /*
  * Print a stack backtrace.
@@ -1264,7 +1261,7 @@ void
 stacktrace_subr(struct trapframe *regs, int (*printfn) (const char *,...))
 {
 	InstFmt i;
-	unsigned a0, a1, a2, a3, pc, sp, fp, ra, va, subr;
+	uintptr_t a0, a1, a2, a3, pc, sp, fp, ra, va, subr;
 	unsigned instr, mask;
 	unsigned int frames = 0;
 	int more, stksize;
@@ -1291,6 +1288,7 @@ loop:
 		goto finish;	/* XXX */
 	}
 	/* check for bad SP: could foul up next frame */
+	/*XXX MIPS64 bad: this hard-coded SP is lame */
 	if (sp & 3 || sp < 0x80000000) {
 		(*printfn) ("SP 0x%x: not in kernel\n", sp);
 		ra = 0;
@@ -1300,7 +1298,7 @@ loop:
 #define Between(x, y, z) \
 		( ((x) <= (y)) && ((y) < (z)) )
 #define pcBetween(a,b) \
-		Between((unsigned)a, pc, (unsigned)b)
+		Between((uintptr_t)a, pc, (uintptr_t)b)
 
 	/*
 	 * Check for current PC in  exception handler code that don't have a
@@ -1308,30 +1306,31 @@ loop:
 	 * on relative ordering of functions in exception.S, swtch.S.
 	 */
 	if (pcBetween(MipsKernGenException, MipsUserGenException))
-		subr = (unsigned)MipsKernGenException;
+		subr = (uintptr_t)MipsKernGenException;
 	else if (pcBetween(MipsUserGenException, MipsKernIntr))
-		subr = (unsigned)MipsUserGenException;
+		subr = (uintptr_t)MipsUserGenException;
 	else if (pcBetween(MipsKernIntr, MipsUserIntr))
-		subr = (unsigned)MipsKernIntr;
+		subr = (uintptr_t)MipsKernIntr;
 	else if (pcBetween(MipsUserIntr, MipsTLBInvalidException))
-		subr = (unsigned)MipsUserIntr;
+		subr = (uintptr_t)MipsUserIntr;
 	else if (pcBetween(MipsTLBInvalidException,
 	    MipsKernTLBInvalidException))
-		subr = (unsigned)MipsTLBInvalidException;
+		subr = (uintptr_t)MipsTLBInvalidException;
 	else if (pcBetween(MipsKernTLBInvalidException,
 	    MipsUserTLBInvalidException))
-		subr = (unsigned)MipsKernTLBInvalidException;
+		subr = (uintptr_t)MipsKernTLBInvalidException;
 	else if (pcBetween(MipsUserTLBInvalidException, MipsTLBMissException))
-		subr = (unsigned)MipsUserTLBInvalidException;
+		subr = (uintptr_t)MipsUserTLBInvalidException;
 	else if (pcBetween(cpu_switch, MipsSwitchFPState))
-		subr = (unsigned)cpu_switch;
+		subr = (uintptr_t)cpu_switch;
 	else if (pcBetween(_locore, _locoreEnd)) {
-		subr = (unsigned)_locore;
+		subr = (uintptr_t)_locore;
 		ra = 0;
 		goto done;
 	}
 	/* check for bad PC */
-	if (pc & 3 || pc < (unsigned)0x80000000 || pc >= (unsigned)edata) {
+	/*XXX MIPS64 bad: These hard coded constants are lame */
+	if (pc & 3 || pc < (uintptr_t)0x80000000 || pc >= (uintptr_t)edata) {
 		(*printfn) ("PC 0x%x: not in kernel\n", pc);
 		ra = 0;
 		goto done;
@@ -1535,8 +1534,8 @@ static struct {
 /*
  * Map a function address to a string name, if known; or a hex string.
  */
-char *
-fn_name(unsigned addr)
+static char *
+fn_name(uintptr_t addr)
 {
 	static char buf[17];
 	int i = 0;
@@ -1557,7 +1556,7 @@ fn_name(unsigned addr)
 	for (i = 0; names[i].name; i++)
 		if (names[i].addr == (void *)addr)
 			return (names[i].name);
-	sprintf(buf, "%x", addr);
+	sprintf(buf, "%jx", (uintmax_t)addr);
 	return (buf);
 }
 


More information about the svn-src-projects mailing list