Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
fork
Configure Feed
Select the types of activity you want to include in your feed.
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _PERF_DWARF_REGS_H_
3#define _PERF_DWARF_REGS_H_
4#include "annotate.h"
5#include <elf.h>
6
7#ifndef EM_AARCH64
8#define EM_AARCH64 183 /* ARM 64 bit */
9#endif
10
11#ifndef EM_CSKY
12#define EM_CSKY 252 /* C-SKY */
13#endif
14#ifndef EF_CSKY_ABIV1
15#define EF_CSKY_ABIV1 0X10000000
16#endif
17#ifndef EF_CSKY_ABIV2
18#define EF_CSKY_ABIV2 0X20000000
19#endif
20
21#ifndef EM_LOONGARCH
22#define EM_LOONGARCH 258 /* LoongArch */
23#endif
24
25/* EM_HOST gives the ELF machine for host, EF_HOST gives additional flags. */
26#if defined(__x86_64__)
27 #define EM_HOST EM_X86_64
28#elif defined(__i386__)
29 #define EM_HOST EM_386
30#elif defined(__aarch64__)
31 #define EM_HOST EM_AARCH64
32#elif defined(__arm__)
33 #define EM_HOST EM_ARM
34#elif defined(__alpha__)
35 #define EM_HOST EM_ALPHA
36#elif defined(__arc__)
37 #define EM_HOST EM_ARC
38#elif defined(__AVR__)
39 #define EM_HOST EM_AVR
40#elif defined(__AVR32__)
41 #define EM_HOST EM_AVR32
42#elif defined(__bfin__)
43 #define EM_HOST EM_BLACKFIN
44#elif defined(__csky__)
45 #define EM_HOST EM_CSKY
46 #if defined(__CSKYABIV2__)
47 #define EF_HOST EF_CSKY_ABIV2
48 #else
49 #define EF_HOST EF_CSKY_ABIV1
50 #endif
51#elif defined(__cris__)
52 #define EM_HOST EM_CRIS
53#elif defined(__hppa__) // HP PA-RISC
54 #define EM_HOST EM_PARISC
55#elif defined(__loongarch__)
56 #define EM_HOST EM_LOONGARCH
57#elif defined(__mips__)
58 #define EM_HOST EM_MIPS
59#elif defined(__m32r__)
60 #define EM_HOST EM_M32R
61#elif defined(__microblaze__)
62 #define EM_HOST EM_MICROBLAZE
63#elif defined(__MSP430__)
64 #define EM_HOST EM_MSP430
65#elif defined(__powerpc64__)
66 #define EM_HOST EM_PPC64
67#elif defined(__powerpc__)
68 #define EM_HOST EM_PPC
69#elif defined(__riscv)
70 #define EM_HOST EM_RISCV
71#elif defined(__s390x__)
72 #define EM_HOST EM_S390
73#elif defined(__sh__)
74 #define EM_HOST EM_SH
75#elif defined(__sparc64__) || defined(__sparc__)
76 #define EM_HOST EM_SPARC
77#elif defined(__xtensa__)
78 #define EM_HOST EM_XTENSA
79#else
80 /* Unknown host ELF machine type. */
81 #define EM_HOST EM_NONE
82#endif
83
84#if !defined(EF_HOST)
85 #define EF_HOST 0
86#endif
87
88#define DWARF_REG_PC 0xd3af9c /* random number */
89#define DWARF_REG_FB 0xd3affb /* random number */
90
91#ifdef HAVE_LIBDW_SUPPORT
92/**
93 * get_dwarf_regstr() - Returns ftrace register string from DWARF regnum.
94 * @n: DWARF register number.
95 * @machine: ELF machine signature (EM_*).
96 * @flags: ELF flags for things like ABI differences.
97 */
98const char *get_dwarf_regstr(unsigned int n, unsigned int machine, unsigned int flags);
99
100const char *__get_csky_regstr(unsigned int n, unsigned int flags);
101int __get_csky_regnum(const char *name, unsigned int flags);
102
103int __get_dwarf_regnum_i386(const char *name);
104int __get_dwarf_regnum_x86_64(const char *name);
105int __get_dwarf_regnum_for_perf_regnum_i386(int perf_regnum);
106int __get_dwarf_regnum_for_perf_regnum_x86_64(int perf_regnum);
107
108int __get_dwarf_regnum_for_perf_regnum_arm(int perf_regnum);
109int __get_dwarf_regnum_for_perf_regnum_arm64(int perf_regnum);
110
111int __get_dwarf_regnum_for_perf_regnum_csky(int perf_regnum, unsigned int flags);
112int __get_dwarf_regnum_for_perf_regnum_loongarch(int perf_regnum);
113int __get_dwarf_regnum_for_perf_regnum_powerpc(int perf_regnum);
114int __get_dwarf_regnum_for_perf_regnum_riscv(int perf_regnum);
115int __get_dwarf_regnum_for_perf_regnum_s390(int perf_regnum);
116int __get_dwarf_regnum_for_perf_regnum_mips(int perf_regnum);
117
118/*
119 * get_dwarf_regnum - Returns DWARF regnum from register name
120 * name: architecture register name
121 * machine: ELF machine signature (EM_*)
122 */
123int get_dwarf_regnum(const char *name, unsigned int machine, unsigned int flags);
124
125/*
126 * get_dwarf_regnum - Returns DWARF regnum from perf register number.
127 */
128int get_dwarf_regnum_for_perf_regnum(int perf_regnum, unsigned int machine, unsigned int flags,
129 bool only_libdw_supported);
130
131void get_powerpc_regs(u32 raw_insn, int is_source, struct annotated_op_loc *op_loc);
132
133#else /* HAVE_LIBDW_SUPPORT */
134
135static inline int get_dwarf_regnum(const char *name __maybe_unused,
136 unsigned int machine __maybe_unused,
137 unsigned int flags __maybe_unused)
138{
139 return -1;
140}
141
142static inline void get_powerpc_regs(u32 raw_insn __maybe_unused, int is_source __maybe_unused,
143 struct annotated_op_loc *op_loc __maybe_unused)
144{
145 return;
146}
147#endif
148
149#endif