18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright (C) 2008-2018 Andes Technology Corporation */ 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#ifndef __ASM_STACKTRACE_H 58c2ecf20Sopenharmony_ci#define __ASM_STACKTRACE_H 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci/* Kernel callchain */ 88c2ecf20Sopenharmony_cistruct stackframe { 98c2ecf20Sopenharmony_ci unsigned long fp; 108c2ecf20Sopenharmony_ci unsigned long sp; 118c2ecf20Sopenharmony_ci unsigned long lp; 128c2ecf20Sopenharmony_ci}; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci/* 158c2ecf20Sopenharmony_ci * struct frame_tail: User callchain 168c2ecf20Sopenharmony_ci * IMPORTANT: 178c2ecf20Sopenharmony_ci * This struct is used for call-stack walking, 188c2ecf20Sopenharmony_ci * the order and types matters. 198c2ecf20Sopenharmony_ci * Do not use array, it only stores sizeof(pointer) 208c2ecf20Sopenharmony_ci * 218c2ecf20Sopenharmony_ci * The details can refer to arch/arm/kernel/perf_event.c 228c2ecf20Sopenharmony_ci */ 238c2ecf20Sopenharmony_cistruct frame_tail { 248c2ecf20Sopenharmony_ci unsigned long stack_fp; 258c2ecf20Sopenharmony_ci unsigned long stack_lp; 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* For User callchain with optimize for size */ 298c2ecf20Sopenharmony_cistruct frame_tail_opt_size { 308c2ecf20Sopenharmony_ci unsigned long stack_r6; 318c2ecf20Sopenharmony_ci unsigned long stack_fp; 328c2ecf20Sopenharmony_ci unsigned long stack_gp; 338c2ecf20Sopenharmony_ci unsigned long stack_lp; 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ciextern void 378c2ecf20Sopenharmony_ciget_real_ret_addr(unsigned long *addr, struct task_struct *tsk, int *graph); 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci#endif /* __ASM_STACKTRACE_H */ 40