The patch titled i386: make the 32 bit Frame Pointer backtracer fall back to traditional has been removed from the -mm tree. Its filename was i386-make-the-32-bit-frame-pointer-backtracer-fall-back-to-traditional.patch This patch was dropped because it was merged into mainline or a subsystem tree The current -mm tree may be found at http://userweb.kernel.org/~akpm/mmotm/ ------------------------------------------------------ Subject: i386: make the 32 bit Frame Pointer backtracer fall back to traditional From: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> The 32 bit Frame Pointer backtracer code checks if the EBP is valid to do a backtrace; however currently on a failure it just gives up and prints nothing. That's not very nice; we can do better and still print a decent backtrace. This patch changes the backtracer to fall back to the non-framepointer backtracer if the EBP value isn't within the expected range; so on weird stack corruption cases we get at least something out... Signed-off-by: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: Andi Kleen <ak@xxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- arch/x86/kernel/traps_32.c | 43 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 21 deletions(-) diff -puN arch/x86/kernel/traps_32.c~i386-make-the-32-bit-frame-pointer-backtracer-fall-back-to-traditional arch/x86/kernel/traps_32.c --- a/arch/x86/kernel/traps_32.c~i386-make-the-32-bit-frame-pointer-backtracer-fall-back-to-traditional +++ a/arch/x86/kernel/traps_32.c @@ -120,26 +120,28 @@ static inline unsigned long print_contex { #ifdef CONFIG_FRAME_POINTER struct stack_frame *frame = (struct stack_frame *)bp; - while (valid_stack_ptr(tinfo, frame, sizeof(*frame))) { - struct stack_frame *next; - unsigned long addr; - - addr = frame->return_address; - if (__kernel_text_address(addr)) - ops->address(data, addr); - /* - * break out of recursive entries (such as - * end_of_stack_stop_unwind_function). Also, - * we can never allow a frame pointer to - * move downwards! - */ - next = frame->next_frame; - ebp = (unsigned long) next; - if (next <= frame) - break; - frame = next; - } -#else + if (valid_stack_ptr(tinfo, frame, sizeof(*frame))) + while (valid_stack_ptr(tinfo, frame, sizeof(*frame))) { + struct stack_frame *next; + unsigned long addr; + + addr = frame->return_address; + if (__kernel_text_address(addr)) + ops->address(data, addr); + /* + * break out of recursive entries (such as + * end_of_stack_stop_unwind_function). Also, + * we can never allow a frame pointer to + * move downwards! + */ + next = frame->next_frame; + bp = (unsigned long)next; + if (next <= frame) + break; + frame = next; + } + else +#endif while (valid_stack_ptr(tinfo, stack, sizeof(*stack))) { unsigned long addr; @@ -147,7 +149,6 @@ static inline unsigned long print_contex if (__kernel_text_address(addr)) ops->address(data, addr); } -#endif return bp; } _ Patches currently in -mm which might be from arjan@xxxxxxxxxxxxxxx are git-input.patch git-sched.patch git-x86.patch drivers-edac-use-round_jiffies_relative.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html