From 8885da7591dad014c6815e25729d93c40624d7f1 Mon Sep 17 00:00:00 2001 From: hunt Date: Mon, 2 Jul 2007 07:14:36 +0000 Subject: 2007-07-02 Martin Hunt * sym.c (_stp_kallsyms_lookup): Improve heuristic for determining when a pointer is in a function. (_stp_func_print): New function. * stack-i386.c, stack-x86_64.c: Remove obsolete unwind code. Use _stp_func_print(). --- runtime/stack-x86_64.c | 54 +------------------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) (limited to 'runtime/stack-x86_64.c') diff --git a/runtime/stack-x86_64.c b/runtime/stack-x86_64.c index 15bac801..6f02e7ba 100644 --- a/runtime/stack-x86_64.c +++ b/runtime/stack-x86_64.c @@ -7,66 +7,14 @@ * Public License (GPL); either version 2, or (at your option) any * later version. */ -#ifdef CONFIG_STACK_UNWIND -#include - -static inline int _stp_valid_stack_ptr(struct unwind_frame_info *info) -{ - unsigned long context = (unsigned long)UNW_SP(info) & ~(THREAD_SIZE - 1); - unsigned long p = UNW_PC(info); - return p > context && p < context + THREAD_SIZE - 3; -} - -static int _stp_show_trace_unwind(struct unwind_frame_info *info, int verbose) -{ - int n = 0; - - while (unwind(info) == 0 && UNW_PC(info)) { - if (_stp_valid_stack_ptr(info)) - break; - n++; - if (verbose) { - _stp_print_char(' '); - _stp_symbol_print (UNW_PC(info)); - _stp_print_char('\n'); - } else - _stp_printf ("0x%016lx ", UNW_PC(info)); - if (arch_unw_user_mode(info)) - break; - } - return n; -} -#endif /* CONFIG_STACK_UNWIND */ static void __stp_stack_print (struct pt_regs *regs, int verbose, int levels) { unsigned long *stack = (unsigned long *)®_SP(regs); unsigned long addr; - int uw_ret = 0; - -#ifdef CONFIG_STACK_UNWIND - struct unwind_frame_info info; - if (unwind_init_frame_info(&info, current, regs) == 0) - uw_ret = _stp_show_trace_unwind(&info, verbose); - stack = (void *)UNW_SP(&info); -#endif - - if (uw_ret == 0) - _stp_print("Inexact backtrace:\n"); while ((long)stack & (THREAD_SIZE-1)) { addr = *stack++; - if (_stp_kta(addr)) { - if (verbose) { - if (uw_ret) { - uw_ret = 0; - _stp_print("Leftover inexact backtrace:\n"); - } - _stp_print_char(' '); - _stp_symbol_print(addr); - _stp_print_char('\n'); - } else - _stp_printf("0x%016lx ", addr); - } + _stp_func_print(addr, verbose); } } -- cgit