fixed display of stack frames

svn path=/trunk/; revision=368
This commit is contained in:
Rex Jolliff 1999-04-04 00:22:33 +00:00
parent 29b9e3f0b4
commit 99fa281af1

View file

@ -127,7 +127,7 @@ EXCEPTION_HANDLER_WITH_ERROR("14",14);
EXCEPTION_HANDLER_WITH_ERROR("15",15); EXCEPTION_HANDLER_WITH_ERROR("15",15);
EXCEPTION_HANDLER_WITHOUT_ERROR("16",16); EXCEPTION_HANDLER_WITHOUT_ERROR("16",16);
extern unsigned int etext; extern unsigned int stext, etext;
asmlinkage void exception_handler(unsigned int edi, asmlinkage void exception_handler(unsigned int edi,
unsigned int esi, unsigned int ebp, unsigned int esi, unsigned int ebp,
@ -234,40 +234,41 @@ asmlinkage void exception_handler(unsigned int edi,
} }
if ((cs&0xffff)==KERNEL_CS) if ((cs & 0xffff) == KERNEL_CS)
{ {
DbgPrint("ESP %x\n",esp); DbgPrint("ESP %x\n",esp);
stack=(unsigned int *)(esp+24); stack = (unsigned int *) (esp + 24);
// #if 0
printk("Stack:\n"); printk("Stack:\n");
for (i=0;i<16;i=i+4) for (i = 0; i < 16; i = i + 4)
{ {
DbgPrint("%.8x %.8x %.8x %.8x\n",stack[i],stack[i+1],stack[i+2], DbgPrint("%.8x %.8x %.8x %.8x\n",
stack[i],
stack[i+1],
stack[i+2],
stack[i+3]); stack[i+3]);
} }
printk("Frames:\n"); printk("Frames:\n");
for (i=0;i<32;i++) for (i = 0; i < 32; i++)
{ {
if (stack[i] > KERNEL_BASE && if (stack[i] > ((unsigned int) &stext) &&
stack[i] < ((unsigned int)&etext) ) stack[i] < ((unsigned int) &etext))
{ {
sym = 0; for (sym = -1, j = 0; symbol_table[j].name; j++)
for (j = 0; symbol_table[j].name; j++)
{ {
if (stack[i] >= symbol_table[j].value && if (stack[i] >= symbol_table[j].value &&
symbol_table[j].value > symbol_table[sym].value) (sym == -1 ||
symbol_table[j].value > symbol_table[sym].value))
{ {
sym = j; sym = j;
} }
} }
DbgPrint(" %.8x (%s+%d)", DbgPrint(" %.8x (%s+%d)\n",
stack[i], stack[i],
symbol_table[sym].name, symbol_table[sym].name,
stack[i] - symbol_table[sym].value); stack[i] - symbol_table[sym].value);
} }
} }
// #endif
} }
else else
{ {