linux/tools/perf/util/perf_regs.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2#include <errno.h>
   3#include "perf_regs.h"
   4#include "event.h"
   5
   6const struct sample_reg __weak sample_reg_masks[] = {
   7        SMPL_REG_END
   8};
   9
  10int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
  11                                 char **new_op __maybe_unused)
  12{
  13        return SDT_ARG_SKIP;
  14}
  15
  16#ifdef HAVE_PERF_REGS_SUPPORT
  17int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
  18{
  19        int i, idx = 0;
  20        u64 mask = regs->mask;
  21
  22        if (regs->cache_mask & (1ULL << id))
  23                goto out;
  24
  25        if (!(mask & (1ULL << id)))
  26                return -EINVAL;
  27
  28        for (i = 0; i < id; i++) {
  29                if (mask & (1ULL << i))
  30                        idx++;
  31        }
  32
  33        regs->cache_mask |= (1ULL << id);
  34        regs->cache_regs[id] = regs->regs[idx];
  35
  36out:
  37        *valp = regs->cache_regs[id];
  38        return 0;
  39}
  40#endif
  41