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.

at master 149 lines 4.3 kB view raw
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