^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /* Copyright (C) 2008-2018 Andes Technology Corporation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #ifndef __ASM_STACKTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #define __ASM_STACKTRACE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) /* Kernel callchain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) struct stackframe {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) unsigned long fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) unsigned long sp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) unsigned long lp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * struct frame_tail: User callchain
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * IMPORTANT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) * This struct is used for call-stack walking,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * the order and types matters.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * Do not use array, it only stores sizeof(pointer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * The details can refer to arch/arm/kernel/perf_event.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) struct frame_tail {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) unsigned long stack_fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) unsigned long stack_lp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* For User callchain with optimize for size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct frame_tail_opt_size {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) unsigned long stack_r6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) unsigned long stack_fp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) unsigned long stack_gp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) unsigned long stack_lp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) extern void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) get_real_ret_addr(unsigned long *addr, struct task_struct *tsk, int *graph);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #endif /* __ASM_STACKTRACE_H */