# HG changeset patch
# User konrad@xxxxxxxxxxxxxxxxxxx
# Date 1259769725 18000
# Node ID ea7fc895409dbaf507da807b3473431e6586a907
# Parent f9eeb0545e1c48cd9fc090c3be8d994b258dd636
To help debug stack overflows, debug backtrace now shows
stack pointer values and stack limits.
Authored-by: David Lively
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
diff -r f9eeb0545e1c -r ea7fc895409d xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Wed Dec 02 10:57:18 2009 -0500
+++ b/xen/arch/x86/traps.c Wed Dec 02 11:02:05 2009 -0500
@@ -239,18 +239,25 @@
{
unsigned long *frame, next, addr, low, high;
- printk("Xen call trace:\n ");
-
- printk("[<%p>]", _p(regs->eip));
- print_symbol(" %s\n ", regs->eip);
+ printk("Xen call trace:\n");
/* Bounds for range of valid frame pointer. */
low = (unsigned long)(ESP_BEFORE_EXCEPTION(regs) - 2);
high = (low & ~(STACK_SIZE - 1)) +
(STACK_SIZE - sizeof(struct cpu_info) - 2*sizeof(unsigned long));
+ {
+ unsigned long bos, los;
+ bos = (low & ~(STACK_SIZE - 1)) + STACK_SIZE;
+ los = bos - PAGE_SIZE;
+ printk("Stack base:%p limit:%p\n ", _p(bos), _p(los));
+ }
+
/* The initial frame pointer. */
next = regs->ebp;
+
+ printk("%p[<%p>]", _p(next), _p(regs->eip));
+ print_symbol(" %s\n ", regs->eip);
for ( ; ; )
{
@@ -278,7 +285,7 @@
addr = frame[1];
}
- printk("[<%p>]", _p(addr));
+ printk("%p[<%p>]", _p(next), _p(addr));
print_symbol(" %s\n ", addr);
low = (unsigned long)&frame[2];
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|