[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [Patch v4 1/4] x86/stack: Refactor show_trace()
>>> On 20.11.13 at 14:09, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: > +static void show_trace(const struct cpu_user_regs *regs) > +{ > + unsigned long *sp = ESP_BEFORE_EXCEPTION(regs); So you correctly made it a pointer here... > + > + printk("Xen call trace:\n"); > + > + /* > + * If RIP looks sensible, or the top of the stack doesn't, print RIP at > + * the top of the stack trace. > + */ > + if ( is_active_kernel_text(regs->rip) || > + !is_active_kernel_text(*sp) ) ... and de-reference it here ... > + printk(" [<%p>] %pS\n", _p(regs->rip), _p(regs->rip)); > + /* > + * Else RIP looks bad but the top of the stack looks good. Perhaps we > + * followed a wild function pointer? Lets assume the top of the stack is > a > + * return address; print it and skip past so _show_trace() doesn't print > + * it again. > + */ > + else > + { > + printk(" [<%p>] %pS\n", _p(*sp), _p(*sp)); > + sp++; > + } > + > + _show_trace(*sp, regs->rbp); ... but then you now also de-reference it here? How did that end up producing sane stack dumps? Since one of the two _show_trace() variants wants a pointer here anyway, you would probably best switch its first argument and use the inverse casting in the other variant. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |