|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch v3 3/4] x86/stack: Change show_stack_overflow() to use frame pointers if available
>>> On 18.11.13 at 20:34, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
> Pass a full set of cpu_user_regs, and defer the hand-coded stack printing to
> __show_trace(), which will correctly use frame pointers if available.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Keir Fraser <keir@xxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> CC: Tim Deegan <tim@xxxxxxx>
> ---
> xen/arch/x86/traps.c | 14 ++++----------
> xen/arch/x86/x86_64/traps.c | 2 +-
> xen/include/asm-x86/processor.h | 2 +-
> 3 files changed, 6 insertions(+), 12 deletions(-)
>
> diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
> index d68f93c..67be3c4 100644
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -316,11 +316,11 @@ void show_stack(struct cpu_user_regs *regs)
> show_trace(regs);
> }
>
> -void show_stack_overflow(unsigned int cpu, unsigned long esp)
> +void show_stack_overflow(unsigned int cpu, const struct cpu_user_regs
> *regs)
> {
> #ifdef MEMORY_GUARD
> + unsigned long esp = regs->rsp;
> unsigned long esp_top, esp_bottom;
> - unsigned long *stack, addr;
>
> esp_bottom = (esp | (STACK_SIZE - 1)) + 1;
> esp_top = esp_bottom - PRIMARY_STACK_SIZE;
> @@ -340,16 +340,10 @@ void show_stack_overflow(unsigned int cpu, unsigned
> long esp)
> if ( esp < esp_top )
> esp = esp_top;
>
> - printk("Xen stack overflow (dumping trace %p-%p):\n ",
> + printk("Xen stack overflow (dumping trace %p-%p):\n",
> (void *)esp, (void *)esp_bottom);
>
> - stack = (unsigned long *)esp;
> - while ( ((long)stack & (STACK_SIZE-BYTES_PER_LONG)) != 0 )
> - {
> - addr = *stack++;
> - if ( is_active_kernel_text(addr) )
> - printk("%p: [<%p>] %pS\n", stack, _p(addr), _p(addr));
> - }
> + __show_trace(esp, regs->rbp);
>
> printk("\n");
> #endif
> diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
> index 8e6a7c1..bcf72b6 100644
> --- a/xen/arch/x86/x86_64/traps.c
> +++ b/xen/arch/x86/x86_64/traps.c
> @@ -248,7 +248,7 @@ void do_double_fault(struct cpu_user_regs *regs)
>
> printk("CPU: %d\n", cpu);
> _show_registers(regs, crs, CTXT_hypervisor, NULL);
> - show_stack_overflow(cpu, regs->rsp);
> + show_stack_overflow(cpu, regs);
>
> panic("DOUBLE FAULT -- system shutdown\n");
> }
> diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h
> index 73a3202..c120460 100644
> --- a/xen/include/asm-x86/processor.h
> +++ b/xen/include/asm-x86/processor.h
> @@ -509,7 +509,7 @@ extern always_inline void prefetchw(const void *x)
> #endif
>
> void show_stack(struct cpu_user_regs *regs);
> -void show_stack_overflow(unsigned int cpu, unsigned long esp);
> +void show_stack_overflow(unsigned int cpu, const struct cpu_user_regs
> *regs);
> void show_registers(struct cpu_user_regs *regs);
> void show_execution_state(struct cpu_user_regs *regs);
> #define dump_execution_state()
> run_in_exception_handler(show_execution_state)
> --
> 1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |