perf_regs.c 778 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. // SPDX-License-Identifier: GPL-2.0
  2. #include <linux/errno.h>
  3. #include <linux/kernel.h>
  4. #include <linux/perf_event.h>
  5. #include <linux/bug.h>
  6. #include <linux/sched/task_stack.h>
  7. #include <asm/perf_regs.h>
  8. #include <asm/ptrace.h>
  9. u64 perf_reg_value(struct pt_regs *regs, int idx)
  10. {
  11. if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX))
  12. return 0;
  13. return regs->uregs[idx];
  14. }
  15. #define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1))
  16. int perf_reg_validate(u64 mask)
  17. {
  18. if (!mask || mask & REG_RESERVED)
  19. return -EINVAL;
  20. return 0;
  21. }
  22. u64 perf_reg_abi(struct task_struct *task)
  23. {
  24. return PERF_SAMPLE_REGS_ABI_32;
  25. }
  26. void perf_get_regs_user(struct perf_regs *regs_user,
  27. struct pt_regs *regs)
  28. {
  29. regs_user->regs = task_pt_regs(current);
  30. regs_user->abi = perf_reg_abi(current);
  31. }