|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: slightly improve stack trace on debug builds
On 25/09/2012 16:07, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:
> + addr = regs->eip;
> + while ( !is_kernel_text(addr) &&
> + (system_state > SYS_STATE_boot || !is_kernel_inittext(addr)) )
> + {
> + /* Special case when a bad pointer was called. */
> + addr ^= regs->eip ^ *ESP_BEFORE_EXCEPTION(regs);
> + if ( addr == regs->eip )
> + break;
> + }
Lol, how does your brain work this way? It took me 15 minutes to decode this
to something like (also I added range checks on ESP_BEFORE_EXCEPTION(regs),
what do you think?):
bool_t is_current_kernel_text(unsigned long addr)
{
return (is_kernel_text(addr) ||
(system_state == SYS_STATE_boot && is_kernel_inittext(addr)));
}
...
/*
* If RIP is not valid hypervisor code then someone may have called into
* oblivion. Peek to see if they left a return address at top of stack.
*/
addr = (!is_current_kernel_text(regs->eip) &&
(ESP_BEFORE_EXCEPTION(regs) >= low) &&
(ESP_BEFORE_EXCEPTION(regs) < high) &&
is_current_kernel_text(*ESP_BEFORE_EXCEPTION(regs)))
? *ESP_BEFORE_EXCEPTION(regs) : regs->eip;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |