Linux Audio

Check our new training course

Loading...
v6.13.7
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef __ASM_STACKTRACE_H
 3#define __ASM_STACKTRACE_H
 4
 5#include <asm/ptrace.h>
 6#include <linux/llist.h>
 7
 8struct stackframe {
 9	/*
10	 * FP member should hold R7 when CONFIG_THUMB2_KERNEL is enabled
11	 * and R11 otherwise.
12	 */
13	unsigned long fp;
14	unsigned long sp;
15	unsigned long lr;
16	unsigned long pc;
17
18	/* address of the LR value on the stack */
19	unsigned long *lr_addr;
20#ifdef CONFIG_KRETPROBES
21	struct llist_node *kr_cur;
22	struct task_struct *tsk;
23#endif
24#ifdef CONFIG_UNWINDER_FRAME_POINTER
25	bool ex_frame;
26#endif
27};
28
29static inline bool on_thread_stack(void)
30{
31	unsigned long delta = current_stack_pointer ^ (unsigned long)current->stack;
32
33	return delta < THREAD_SIZE;
34}
35
36static __always_inline
37void arm_get_current_stackframe(struct pt_regs *regs, struct stackframe *frame)
38{
39		frame->fp = frame_pointer(regs);
40		frame->sp = regs->ARM_sp;
41		frame->lr = regs->ARM_lr;
42		frame->pc = regs->ARM_pc;
43#ifdef CONFIG_KRETPROBES
44		frame->kr_cur = NULL;
45		frame->tsk = current;
46#endif
47#ifdef CONFIG_UNWINDER_FRAME_POINTER
48		frame->ex_frame = in_entry_text(frame->pc);
49#endif
50}
51
52extern int unwind_frame(struct stackframe *frame);
53extern void walk_stackframe(struct stackframe *frame,
54			    bool (*fn)(void *, unsigned long), void *data);
55extern void dump_mem(const char *lvl, const char *str, unsigned long bottom,
56		     unsigned long top);
57extern void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk,
58			   const char *loglvl);
59
60#endif	/* __ASM_STACKTRACE_H */
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef __ASM_STACKTRACE_H
 3#define __ASM_STACKTRACE_H
 4
 5#include <asm/ptrace.h>
 
 6
 7struct stackframe {
 8	/*
 9	 * FP member should hold R7 when CONFIG_THUMB2_KERNEL is enabled
10	 * and R11 otherwise.
11	 */
12	unsigned long fp;
13	unsigned long sp;
14	unsigned long lr;
15	unsigned long pc;
 
 
 
 
 
 
 
 
 
 
16};
17
 
 
 
 
 
 
 
18static __always_inline
19void arm_get_current_stackframe(struct pt_regs *regs, struct stackframe *frame)
20{
21		frame->fp = frame_pointer(regs);
22		frame->sp = regs->ARM_sp;
23		frame->lr = regs->ARM_lr;
24		frame->pc = regs->ARM_pc;
 
 
 
 
 
 
 
25}
26
27extern int unwind_frame(struct stackframe *frame);
28extern void walk_stackframe(struct stackframe *frame,
29			    int (*fn)(struct stackframe *, void *), void *data);
 
 
 
 
30
31#endif	/* __ASM_STACKTRACE_H */