[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 |