mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 21:46:05 +00:00
fixed display of stack frames
svn path=/trunk/; revision=368
This commit is contained in:
parent
29b9e3f0b4
commit
99fa281af1
1 changed files with 29 additions and 28 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue