diff options
Diffstat (limited to 'tools/perf/arch/mips/util')
-rw-r--r-- | tools/perf/arch/mips/util/Build | 2 | ||||
-rw-r--r-- | tools/perf/arch/mips/util/perf_regs.c | 22 | ||||
-rw-r--r-- | tools/perf/arch/mips/util/unwind-libunwind.c | 22 |
3 files changed, 46 insertions, 0 deletions
diff --git a/tools/perf/arch/mips/util/Build b/tools/perf/arch/mips/util/Build new file mode 100644 index 000000000000..691fa2051958 --- /dev/null +++ b/tools/perf/arch/mips/util/Build @@ -0,0 +1,2 @@ +perf-util-y += perf_regs.o +perf-util-$(CONFIG_LOCAL_LIBUNWIND) += unwind-libunwind.o diff --git a/tools/perf/arch/mips/util/perf_regs.c b/tools/perf/arch/mips/util/perf_regs.c new file mode 100644 index 000000000000..6b1665f41180 --- /dev/null +++ b/tools/perf/arch/mips/util/perf_regs.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0 +#include "perf_regs.h" +#include "../../util/perf_regs.h" + +static const struct sample_reg sample_reg_masks[] = { + SMPL_REG_END +}; + +uint64_t arch__intr_reg_mask(void) +{ + return PERF_REGS_MASK; +} + +uint64_t arch__user_reg_mask(void) +{ + return PERF_REGS_MASK; +} + +const struct sample_reg *arch__sample_reg_masks(void) +{ + return sample_reg_masks; +} diff --git a/tools/perf/arch/mips/util/unwind-libunwind.c b/tools/perf/arch/mips/util/unwind-libunwind.c new file mode 100644 index 000000000000..0d8c99c29da6 --- /dev/null +++ b/tools/perf/arch/mips/util/unwind-libunwind.c @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <errno.h> +#include <libunwind.h> +#include "perf_regs.h" +#include "../../util/unwind.h" +#include "util/debug.h" + +int libunwind__arch_reg_id(int regnum) +{ + switch (regnum) { + case UNW_MIPS_R1 ... UNW_MIPS_R25: + return regnum - UNW_MIPS_R1 + PERF_REG_MIPS_R1; + case UNW_MIPS_R28 ... UNW_MIPS_R31: + return regnum - UNW_MIPS_R28 + PERF_REG_MIPS_R28; + case UNW_MIPS_PC: + return PERF_REG_MIPS_PC; + default: + pr_err("unwind: invalid reg id %d\n", regnum); + return -EINVAL; + } +} |