Map perf APIs (perf_reg_name/get_arch_regstr/unwind__arch_reg_id) with MIPS specific registers. [ayan@wavecomp.com: repick this patch for unwinding userstack backtrace by perf and libunwind on MIPS based CPU.] [yangtiezhu@loongson.cn: Add sample_reg_masks[] to fix build error, silence some checkpatch errors and warnings, and also separate the original patches into two parts (MIPS kernel and perf tools) to merge easily.] The original patches: https://lore.kernel.org/patchwork/patch/1126521/ https://lore.kernel.org/patchwork/patch/1126520/ Committer notes: Do it as __perf_reg_name() to cope with: 067012974c8ae31a ("perf tools: Fix arm64 build error with gcc-11") Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Archer Yan <ayan@wavecomp.com> Cc: David Daney <david.daney@cavium.com> Cc: Jianlin Lv <Jianlin.Lv@arm.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Juxin Gao <gaojuxin@loongson.cn> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Xuefeng Li <lixuefeng@loongson.cn> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: linux-mips@vger.kernel.org Link: http://lore.kernel.org/lkml/1612409724-3516-3-git-send-email-yangtiezhu@loongson.cn Signed-off-by: Archer Yan <ayan@wavecomp.com> Signed-off-by: David Daney <david.daney@cavium.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
85 lines
1.6 KiB
C
85 lines
1.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef ARCH_PERF_REGS_H
|
|
#define ARCH_PERF_REGS_H
|
|
|
|
#include <stdlib.h>
|
|
#include <linux/types.h>
|
|
#include <asm/perf_regs.h>
|
|
|
|
#define PERF_REGS_MAX PERF_REG_MIPS_MAX
|
|
#define PERF_REG_IP PERF_REG_MIPS_PC
|
|
#define PERF_REG_SP PERF_REG_MIPS_R29
|
|
|
|
#define PERF_REGS_MASK ((1ULL << PERF_REG_MIPS_MAX) - 1)
|
|
|
|
static inline const char *__perf_reg_name(int id)
|
|
{
|
|
switch (id) {
|
|
case PERF_REG_MIPS_PC:
|
|
return "PC";
|
|
case PERF_REG_MIPS_R1:
|
|
return "$1";
|
|
case PERF_REG_MIPS_R2:
|
|
return "$2";
|
|
case PERF_REG_MIPS_R3:
|
|
return "$3";
|
|
case PERF_REG_MIPS_R4:
|
|
return "$4";
|
|
case PERF_REG_MIPS_R5:
|
|
return "$5";
|
|
case PERF_REG_MIPS_R6:
|
|
return "$6";
|
|
case PERF_REG_MIPS_R7:
|
|
return "$7";
|
|
case PERF_REG_MIPS_R8:
|
|
return "$8";
|
|
case PERF_REG_MIPS_R9:
|
|
return "$9";
|
|
case PERF_REG_MIPS_R10:
|
|
return "$10";
|
|
case PERF_REG_MIPS_R11:
|
|
return "$11";
|
|
case PERF_REG_MIPS_R12:
|
|
return "$12";
|
|
case PERF_REG_MIPS_R13:
|
|
return "$13";
|
|
case PERF_REG_MIPS_R14:
|
|
return "$14";
|
|
case PERF_REG_MIPS_R15:
|
|
return "$15";
|
|
case PERF_REG_MIPS_R16:
|
|
return "$16";
|
|
case PERF_REG_MIPS_R17:
|
|
return "$17";
|
|
case PERF_REG_MIPS_R18:
|
|
return "$18";
|
|
case PERF_REG_MIPS_R19:
|
|
return "$19";
|
|
case PERF_REG_MIPS_R20:
|
|
return "$20";
|
|
case PERF_REG_MIPS_R21:
|
|
return "$21";
|
|
case PERF_REG_MIPS_R22:
|
|
return "$22";
|
|
case PERF_REG_MIPS_R23:
|
|
return "$23";
|
|
case PERF_REG_MIPS_R24:
|
|
return "$24";
|
|
case PERF_REG_MIPS_R25:
|
|
return "$25";
|
|
case PERF_REG_MIPS_R28:
|
|
return "$28";
|
|
case PERF_REG_MIPS_R29:
|
|
return "$29";
|
|
case PERF_REG_MIPS_R30:
|
|
return "$30";
|
|
case PERF_REG_MIPS_R31:
|
|
return "$31";
|
|
default:
|
|
break;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
#endif /* ARCH_PERF_REGS_H */
|