2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_STACKTRACE_H
# define _ASM_X86_STACKTRACE_H
2006-09-26 10:52:34 +02:00
2006-12-07 02:14:11 +01:00
extern int kstack_depth_to_print ;
2009-07-01 21:02:09 +02:00
int x86_is_stack_id ( int id , char * name ) ;
2009-12-17 05:40:33 +01:00
struct thread_info ;
struct stacktrace_ops ;
typedef unsigned long ( * walk_stack_t ) ( struct thread_info * tinfo ,
unsigned long * stack ,
unsigned long bp ,
const struct stacktrace_ops * ops ,
void * data ,
unsigned long * end ,
int * graph ) ;
extern unsigned long
print_context_stack ( struct thread_info * tinfo ,
unsigned long * stack , unsigned long bp ,
const struct stacktrace_ops * ops , void * data ,
unsigned long * end , int * graph ) ;
2009-12-17 05:40:34 +01:00
extern unsigned long
print_context_stack_bp ( struct thread_info * tinfo ,
unsigned long * stack , unsigned long bp ,
const struct stacktrace_ops * ops , void * data ,
unsigned long * end , int * graph ) ;
2006-09-26 10:52:34 +02:00
/* Generic stack tracer with callbacks */
struct stacktrace_ops {
void ( * warning ) ( void * data , char * msg ) ;
/* msg must contain %s for the symbol */
void ( * warning_symbol ) ( void * data , char * msg , unsigned long symbol ) ;
2008-01-30 13:33:07 +01:00
void ( * address ) ( void * data , unsigned long address , int reliable ) ;
2006-09-26 10:52:34 +02:00
/* On negative return stop dumping */
int ( * stack ) ( void * data , char * name ) ;
2009-12-17 05:40:33 +01:00
walk_stack_t walk_stack ;
2006-09-26 10:52:34 +02:00
} ;
2008-01-30 13:33:07 +01:00
void dump_trace ( struct task_struct * tsk , struct pt_regs * regs ,
unsigned long * stack , unsigned long bp ,
2007-10-17 18:04:37 +02:00
const struct stacktrace_ops * ops , void * data ) ;
2006-09-26 10:52:34 +02:00
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_STACKTRACE_H */