134 lines
3.3 KiB
C
134 lines
3.3 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
#ifndef _PERF_DWARF_REGS_H_
|
||
|
#define _PERF_DWARF_REGS_H_
|
||
|
#include "annotate.h"
|
||
|
#include <elf.h>
|
||
|
|
||
|
#ifndef EM_AARCH64
|
||
|
#define EM_AARCH64 183 /* ARM 64 bit */
|
||
|
#endif
|
||
|
|
||
|
#ifndef EM_CSKY
|
||
|
#define EM_CSKY 252 /* C-SKY */
|
||
|
#endif
|
||
|
#ifndef EF_CSKY_ABIV1
|
||
|
#define EF_CSKY_ABIV1 0X10000000
|
||
|
#endif
|
||
|
#ifndef EF_CSKY_ABIV2
|
||
|
#define EF_CSKY_ABIV2 0X20000000
|
||
|
#endif
|
||
|
|
||
|
#ifndef EM_LOONGARCH
|
||
|
#define EM_LOONGARCH 258 /* LoongArch */
|
||
|
#endif
|
||
|
|
||
|
/* EM_HOST gives the ELF machine for host, EF_HOST gives additional flags. */
|
||
|
#if defined(__x86_64__)
|
||
|
#define EM_HOST EM_X86_64
|
||
|
#elif defined(__i386__)
|
||
|
#define EM_HOST EM_386
|
||
|
#elif defined(__aarch64__)
|
||
|
#define EM_HOST EM_AARCH64
|
||
|
#elif defined(__arm__)
|
||
|
#define EM_HOST EM_ARM
|
||
|
#elif defined(__alpha__)
|
||
|
#define EM_HOST EM_ALPHA
|
||
|
#elif defined(__arc__)
|
||
|
#define EM_HOST EM_ARC
|
||
|
#elif defined(__AVR__)
|
||
|
#define EM_HOST EM_AVR
|
||
|
#elif defined(__AVR32__)
|
||
|
#define EM_HOST EM_AVR32
|
||
|
#elif defined(__bfin__)
|
||
|
#define EM_HOST EM_BLACKFIN
|
||
|
#elif defined(__csky__)
|
||
|
#define EM_HOST EM_CSKY
|
||
|
#if defined(__CSKYABIV2__)
|
||
|
#define EF_HOST EF_CSKY_ABIV2
|
||
|
#else
|
||
|
#define EF_HOST EF_CSKY_ABIV1
|
||
|
#endif
|
||
|
#elif defined(__cris__)
|
||
|
#define EM_HOST EM_CRIS
|
||
|
#elif defined(__hppa__) // HP PA-RISC
|
||
|
#define EM_HOST EM_PARISC
|
||
|
#elif defined(__loongarch__)
|
||
|
#define EM_HOST EM_LOONGARCH
|
||
|
#elif defined(__mips__)
|
||
|
#define EM_HOST EM_MIPS
|
||
|
#elif defined(__m32r__)
|
||
|
#define EM_HOST EM_M32R
|
||
|
#elif defined(__microblaze__)
|
||
|
#define EM_HOST EM_MICROBLAZE
|
||
|
#elif defined(__MSP430__)
|
||
|
#define EM_HOST EM_MSP430
|
||
|
#elif defined(__powerpc64__)
|
||
|
#define EM_HOST EM_PPC64
|
||
|
#elif defined(__powerpc__)
|
||
|
#define EM_HOST EM_PPC
|
||
|
#elif defined(__riscv)
|
||
|
#define EM_HOST EM_RISCV
|
||
|
#elif defined(__s390x__)
|
||
|
#define EM_HOST EM_S390
|
||
|
#elif defined(__sh__)
|
||
|
#define EM_HOST EM_SH
|
||
|
#elif defined(__sparc64__) || defined(__sparc__)
|
||
|
#define EM_HOST EM_SPARC
|
||
|
#elif defined(__xtensa__)
|
||
|
#define EM_HOST EM_XTENSA
|
||
|
#else
|
||
|
/* Unknown host ELF machine type. */
|
||
|
#define EM_HOST EM_NONE
|
||
|
#endif
|
||
|
|
||
|
#if !defined(EF_HOST)
|
||
|
#define EF_HOST 0
|
||
|
#endif
|
||
|
|
||
|
#define DWARF_REG_PC 0xd3af9c /* random number */
|
||
|
#define DWARF_REG_FB 0xd3affb /* random number */
|
||
|
|
||
|
#ifdef HAVE_LIBDW_SUPPORT
|
||
|
const char *get_csky_regstr(unsigned int n, unsigned int flags);
|
||
|
|
||
|
/**
|
||
|
* get_dwarf_regstr() - Returns ftrace register string from DWARF regnum.
|
||
|
* @n: DWARF register number.
|
||
|
* @machine: ELF machine signature (EM_*).
|
||
|
* @flags: ELF flags for things like ABI differences.
|
||
|
*/
|
||
|
const char *get_dwarf_regstr(unsigned int n, unsigned int machine, unsigned int flags);
|
||
|
|
||
|
int get_x86_regnum(const char *name);
|
||
|
|
||
|
#if !defined(__x86_64__) && !defined(__i386__)
|
||
|
int get_arch_regnum(const char *name);
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* get_dwarf_regnum - Returns DWARF regnum from register name
|
||
|
* name: architecture register name
|
||
|
* machine: ELF machine signature (EM_*)
|
||
|
*/
|
||
|
int get_dwarf_regnum(const char *name, unsigned int machine, unsigned int flags);
|
||
|
|
||
|
void get_powerpc_regs(u32 raw_insn, int is_source, struct annotated_op_loc *op_loc);
|
||
|
|
||
|
#else /* HAVE_LIBDW_SUPPORT */
|
||
|
|
||
|
static inline int get_dwarf_regnum(const char *name __maybe_unused,
|
||
|
unsigned int machine __maybe_unused,
|
||
|
unsigned int flags __maybe_unused)
|
||
|
{
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
static inline void get_powerpc_regs(u32 raw_insn __maybe_unused, int is_source __maybe_unused,
|
||
|
struct annotated_op_loc *op_loc __maybe_unused)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif
|