1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 * Copyright (C) 2017 Josh Poimboeuf <jpoimboe@redhat.com>
9 #include <linux/types.h>
10 #include <linux/compiler.h>
13 * The ORC_REG_* registers are base registers which are used to find other
14 * registers on the stack.
16 * ORC_REG_PREV_SP, also known as DWARF Call Frame Address (CFA), is the
17 * address of the previous frame: the caller's SP before it called the current
20 * ORC_REG_UNDEFINED means the corresponding register's value didn't change in
23 * The most commonly used base registers are SP and BP -- which the previous SP
24 * is usually based on -- and PREV_SP and UNDEFINED -- which the previous BP is
27 * The rest of the base registers are needed for special cases like entry code
28 * and GCC realigned stacks.
30 #define ORC_REG_UNDEFINED 0
31 #define ORC_REG_PREV_SP 1
38 #define ORC_REG_BP_INDIRECT 8
39 #define ORC_REG_SP_INDIRECT 9
40 #define ORC_REG_MAX 15
43 #include <asm/byteorder.h>
46 * This struct is more or less a vastly simplified version of the DWARF Call
47 * Frame Information standard. It contains only the necessary parts of DWARF
48 * CFI, simplified for ease of access by the in-kernel unwinder. It tells the
49 * unwinder how to find the previous SP and BP (and sometimes entry regs) on
50 * the stack for a given code address. Each instance of the struct corresponds
51 * to one or more code locations.
56 #if defined(__LITTLE_ENDIAN_BITFIELD)
61 #elif defined(__BIG_ENDIAN_BITFIELD)
70 #endif /* __ASSEMBLY__ */
72 #endif /* _ORC_TYPES_H */