| /* SPDX-License-Identifier: GPL-2.0-only */ |
| #ifndef __ASM_STACKTRACE_FRAME_H |
| #define __ASM_STACKTRACE_FRAME_H |
| |
| /* |
| * - FRAME_META_TYPE_NONE |
| * |
| * This value is reserved. |
| * |
| * - FRAME_META_TYPE_FINAL |
| * |
| * The record is the last entry on the stack. |
| * Unwinding should terminate successfully. |
| * |
| * - FRAME_META_TYPE_PT_REGS |
| * |
| * The record is embedded within a struct pt_regs, recording the registers at |
| * an arbitrary point in time. |
| * Unwinding should consume pt_regs::pc, followed by pt_regs::lr. |
| * |
| * Note: all other values are reserved and should result in unwinding |
| * terminating with an error. |
| */ |
| #define FRAME_META_TYPE_NONE 0 |
| #define FRAME_META_TYPE_FINAL 1 |
| #define FRAME_META_TYPE_PT_REGS 2 |
| |
| #ifndef __ASSEMBLY__ |
| /* |
| * A standard AAPCS64 frame record. |
| */ |
| struct frame_record { |
| u64 fp; |
| u64 lr; |
| }; |
| |
| /* |
| * A metadata frame record indicating a special unwind. |
| * The record::{fp,lr} fields must be zero to indicate the presence of |
| * metadata. |
| */ |
| struct frame_record_meta { |
| struct frame_record record; |
| u64 type; |
| }; |
| #endif /* __ASSEMBLY */ |
| |
| #endif /* __ASM_STACKTRACE_FRAME_H */ |