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