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