perf report: Add tools/arch/x86/include/asm/amd-ibs.h
[linux-2.6-microblaze.git] / tools / arch / x86 / include / asm / orc_types.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright (C) 2017 Josh Poimboeuf <jpoimboe@redhat.com>
4  */
5
6 #ifndef _ORC_TYPES_H
7 #define _ORC_TYPES_H
8
9 #include <linux/types.h>
10 #include <linux/compiler.h>
11
12 /*
13  * The ORC_REG_* registers are base registers which are used to find other
14  * registers on the stack.
15  *
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
18  * function.
19  *
20  * ORC_REG_UNDEFINED means the corresponding register's value didn't change in
21  * the current frame.
22  *
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
25  * usually based on.
26  *
27  * The rest of the base registers are needed for special cases like entry code
28  * and GCC realigned stacks.
29  */
30 #define ORC_REG_UNDEFINED               0
31 #define ORC_REG_PREV_SP                 1
32 #define ORC_REG_DX                      2
33 #define ORC_REG_DI                      3
34 #define ORC_REG_BP                      4
35 #define ORC_REG_SP                      5
36 #define ORC_REG_R10                     6
37 #define ORC_REG_R13                     7
38 #define ORC_REG_BP_INDIRECT             8
39 #define ORC_REG_SP_INDIRECT             9
40 #define ORC_REG_MAX                     15
41
42 #ifndef __ASSEMBLY__
43 #include <asm/byteorder.h>
44
45 /*
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.
52  */
53 struct orc_entry {
54         s16             sp_offset;
55         s16             bp_offset;
56 #if defined(__LITTLE_ENDIAN_BITFIELD)
57         unsigned        sp_reg:4;
58         unsigned        bp_reg:4;
59         unsigned        type:2;
60         unsigned        end:1;
61 #elif defined(__BIG_ENDIAN_BITFIELD)
62         unsigned        bp_reg:4;
63         unsigned        sp_reg:4;
64         unsigned        unused:5;
65         unsigned        end:1;
66         unsigned        type:2;
67 #endif
68 } __packed;
69
70 #endif /* __ASSEMBLY__ */
71
72 #endif /* _ORC_TYPES_H */