2012-03-05 11:49:27 +00:00
/*
* Copyright ( C ) 2012 ARM Ltd .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# ifndef __ASM_STACKTRACE_H
# define __ASM_STACKTRACE_H
2017-07-20 12:26:48 +01:00
# include <linux/percpu.h>
# include <linux/sched.h>
# include <linux/sched/task_stack.h>
# include <asm/memory.h>
# include <asm/ptrace.h>
2015-12-15 17:33:40 +09:00
2012-03-05 11:49:27 +00:00
struct stackframe {
unsigned long fp ;
unsigned long pc ;
2015-12-15 17:33:41 +09:00
# ifdef CONFIG_FUNCTION_GRAPH_TRACER
unsigned int graph ;
# endif
2012-03-05 11:49:27 +00:00
} ;
2015-12-15 17:33:40 +09:00
extern int unwind_frame ( struct task_struct * tsk , struct stackframe * frame ) ;
extern void walk_stackframe ( struct task_struct * tsk , struct stackframe * frame ,
2012-03-05 11:49:27 +00:00
int ( * fn ) ( struct stackframe * , void * ) , void * data ) ;
2017-05-09 09:53:37 +08:00
extern void dump_backtrace ( struct pt_regs * regs , struct task_struct * tsk ) ;
2012-03-05 11:49:27 +00:00
2017-07-20 12:26:48 +01:00
DECLARE_PER_CPU ( unsigned long [ IRQ_STACK_SIZE / sizeof ( long ) ] , irq_stack ) ;
static inline bool on_irq_stack ( unsigned long sp )
{
unsigned long low = ( unsigned long ) raw_cpu_ptr ( irq_stack ) ;
unsigned long high = low + IRQ_STACK_SIZE ;
return ( low < = sp & & sp < high ) ;
}
static inline bool on_task_stack ( struct task_struct * tsk , unsigned long sp )
{
unsigned long low = ( unsigned long ) task_stack_page ( tsk ) ;
unsigned long high = low + THREAD_SIZE ;
return ( low < = sp & & sp < high ) ;
}
2012-03-05 11:49:27 +00:00
# endif /* __ASM_STACKTRACE_H */