From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Robert S. Phillips" Subject: [PATCH] - Stacktrace modification Date: Wed, 17 May 2006 09:51:18 -0400 Message-ID: <446B2A56.50005@virtualiron.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080505020702000009070306" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------080505020702000009070306 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit This patch aids the quick diagnosis of stack overflow bugs. In the debug build when showing a stack trace, show stack limits and stack frame addresses. This results in the follow appearance: (XEN) Stack base:ffff830000234000 limit:ffff830000233000 (XEN) Xen call trace: (XEN) ffff830000233c28[] put_page_type+0xf8/0x455 (XEN) ffff830000233c48[] put_page_and_type+0x15/0x20 (XEN) ffff830000233c88[] put_page_from_l1e+0x12a/0x1ad (XEN) ffff830000233cf8[] revalidate_l1+0x18f/0x1a7 (XEN) ffff830000233d88[] ptwr_flush+0x2a2/0x4fb (XEN) ffff830000233da8[] cleanup_writable_pagetable+0x68/0x88 (XEN) ffff830000233f08[] do_mmuext_op+0xd4/0xaf5 (XEN) 00007cffffdcc0b7[] syscall_enter+0xad/0x107 Signed-off-by: Robert S. Phillips (rphillips@virtualiron.com) --------------080505020702000009070306 Content-Type: text/plain; name="patch-9811-stacktrace" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="patch-9811-stacktrace" # HG changeset patch # User rphillips@rphillips # Node ID f5480845f7080594723fe107e04fb4b9e4223b74 # Parent 204450e59b0a80a99ae335ef9cdf33de0caaaa77 This patch aids the quick diagnosis of stack overflow bugs. In the debug build when showing a stack trace, show stack limits and stack frame addresses. This results in the follow appearance: (XEN) Stack base:ffff830000234000 limit:ffff830000233000 (XEN) Xen call trace: (XEN) ffff830000233c28[] put_page_type+0xf8/0x455 (XEN) ffff830000233c48[] put_page_and_type+0x15/0x20 (XEN) ffff830000233c88[] put_page_from_l1e+0x12a/0x1ad (XEN) ffff830000233cf8[] revalidate_l1+0x18f/0x1a7 (XEN) ffff830000233d88[] ptwr_flush+0x2a2/0x4fb (XEN) ffff830000233da8[] cleanup_writable_pagetable+0x68/0x88 (XEN) ffff830000233f08[] do_mmuext_op+0xd4/0xaf5 (XEN) 00007cffffdcc0b7[] syscall_enter+0xad/0x107 Signed-off-by: Robert S. Phillips (rphillips@virtualiron.com) diff -r 204450e59b0a -r f5480845f708 xen/arch/x86/traps.c --- a/xen/arch/x86/traps.c Tue May 16 11:26:53 2006 -0400 +++ b/xen/arch/x86/traps.c Tue May 16 11:47:06 2006 -0400 @@ -198,20 +198,22 @@ static void show_trace(struct cpu_user_regs *regs) { - unsigned long *frame, next, addr, low, high; - - printk("Xen call trace:\n "); - - printk("[<%p>]", _p(regs->eip)); - print_symbol(" %s\n ", regs->eip); + unsigned long *frame, next, addr, low, high, bos, los; /* 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)); - + bos = (low & ~(STACK_SIZE - 1)) + STACK_SIZE; + los = bos - PAGE_SIZE; + printk("Stack base:%p limit:%p\n", _p(bos), _p(los)); + printk("Xen call trace:\n "); + /* The initial frame pointer. */ next = regs->ebp; + + printk("%p[<%p>]", _p(next), _p(regs->eip)); + print_symbol(" %s\n ", regs->eip); for ( ; ; ) { @@ -239,7 +241,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]; --------------080505020702000009070306 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------080505020702000009070306--