linux/arch/mips/kernel/perf_regs.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * This file is subject to the terms and conditions of the GNU General Public
   4 * License.  See the file "COPYING" in the main directory of this archive
   5 * for more details.
   6 *
   7 * Some parts derived from x86 version of this file.
   8 *
   9 * Copyright (C) 2013 Cavium, Inc.
  10 */
  11
  12#include <linux/perf_event.h>
  13
  14#include <asm/ptrace.h>
  15
  16#ifdef CONFIG_32BIT
  17u64 perf_reg_abi(struct task_struct *tsk)
  18{
  19        return PERF_SAMPLE_REGS_ABI_32;
  20}
  21#else /* Must be CONFIG_64BIT */
  22u64 perf_reg_abi(struct task_struct *tsk)
  23{
  24        if (test_tsk_thread_flag(tsk, TIF_32BIT_REGS))
  25                return PERF_SAMPLE_REGS_ABI_32;
  26        else
  27                return PERF_SAMPLE_REGS_ABI_64;
  28}
  29#endif /* CONFIG_32BIT */
  30
  31int perf_reg_validate(u64 mask)
  32{
  33        if (!mask)
  34                return -EINVAL;
  35        if (mask & ~((1ull << PERF_REG_MIPS_MAX) - 1))
  36                return -EINVAL;
  37        return 0;
  38}
  39
  40u64 perf_reg_value(struct pt_regs *regs, int idx)
  41{
  42        long v;
  43
  44        switch (idx) {
  45        case PERF_REG_MIPS_PC:
  46                v = regs->cp0_epc;
  47                break;
  48        case PERF_REG_MIPS_R1 ... PERF_REG_MIPS_R25:
  49                v = regs->regs[idx - PERF_REG_MIPS_R1 + 1];
  50                break;
  51        case PERF_REG_MIPS_R28 ... PERF_REG_MIPS_R31:
  52                v = regs->regs[idx - PERF_REG_MIPS_R28 + 28];
  53                break;
  54
  55        default:
  56                WARN_ON_ONCE(1);
  57                return 0;
  58        }
  59
  60        return (s64)v; /* Sign extend if 32-bit. */
  61}
  62
  63void perf_get_regs_user(struct perf_regs *regs_user,
  64                        struct pt_regs *regs)
  65{
  66        regs_user->regs = task_pt_regs(current);
  67        regs_user->abi = perf_reg_abi(current);
  68}
  69