1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 #ifndef __ASM_STACKTRACE_FRAME_H 3 #define __ASM_STACKTRACE_FRAME_H 4 5 /* 6 * - FRAME_META_TYPE_NONE 7 * 8 * This value is reserved. 9 * 10 * - FRAME_META_TYPE_FINAL 11 * 12 * The record is the last entry on the stack. 13 * Unwinding should terminate successfully. 14 * 15 * - FRAME_META_TYPE_PT_REGS 16 * 17 * The record is embedded within a struct pt_regs, recording the registers at 18 * an arbitrary point in time. 19 * Unwinding should consume pt_regs::pc, followed by pt_regs::lr. 20 * 21 * Note: all other values are reserved and should result in unwinding 22 * terminating with an error. 23 */ 24 #define FRAME_META_TYPE_NONE 0 25 #define FRAME_META_TYPE_FINAL 1 26 #define FRAME_META_TYPE_PT_REGS 2 27 28 #ifndef __ASSEMBLY__ 29 /* 30 * A standard AAPCS64 frame record. 31 */ 32 struct frame_record { 33 u64 fp; 34 u64 lr; 35 }; 36 37 /* 38 * A metadata frame record indicating a special unwind. 39 * The record::{fp,lr} fields must be zero to indicate the presence of 40 * metadata. 41 */ 42 struct frame_record_meta { 43 struct frame_record record; 44 u64 type; 45 }; 46 #endif /* __ASSEMBLY */ 47 48 #endif /* __ASM_STACKTRACE_FRAME_H */ 49