blob: b2ae039eff85c4c7166fecaa713704edf952956c [file] [log] [blame]
Jiri Olsac9b951c42014-01-07 13:47:29 +01001#include <errno.h>
2#include "perf_regs.h"
Jiri Olsa0c4e7742014-04-17 19:39:10 +02003#include "event.h"
Jiri Olsac9b951c42014-01-07 13:47:29 +01004
Stephane Eranianaf4aead2015-09-01 11:30:14 +02005const struct sample_reg __weak sample_reg_masks[] = {
6 SMPL_REG_END
7};
8
Ravi Bangoriad451a202017-03-28 15:17:53 +05309int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
10 char **new_op __maybe_unused)
Alexis Berlemont3b1f8312016-12-14 01:07:32 +010011{
Ravi Bangoriad451a202017-03-28 15:17:53 +053012 return SDT_ARG_SKIP;
Alexis Berlemont3b1f8312016-12-14 01:07:32 +010013}
14
Sukadev Bhattiprolu9fb47652015-09-24 17:53:49 -040015#ifdef HAVE_PERF_REGS_SUPPORT
Jiri Olsac9b951c42014-01-07 13:47:29 +010016int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
17{
18 int i, idx = 0;
19 u64 mask = regs->mask;
20
Naveen N. Raof4782202016-04-28 15:01:10 +053021 if (regs->cache_mask & (1ULL << id))
Jiri Olsa0c4e7742014-04-17 19:39:10 +020022 goto out;
23
Naveen N. Raof4782202016-04-28 15:01:10 +053024 if (!(mask & (1ULL << id)))
Jiri Olsac9b951c42014-01-07 13:47:29 +010025 return -EINVAL;
26
27 for (i = 0; i < id; i++) {
Naveen N. Raof4782202016-04-28 15:01:10 +053028 if (mask & (1ULL << i))
Jiri Olsac9b951c42014-01-07 13:47:29 +010029 idx++;
30 }
31
Naveen N. Raof4782202016-04-28 15:01:10 +053032 regs->cache_mask |= (1ULL << id);
Jiri Olsa0c4e7742014-04-17 19:39:10 +020033 regs->cache_regs[id] = regs->regs[idx];
34
35out:
36 *valp = regs->cache_regs[id];
Jiri Olsac9b951c42014-01-07 13:47:29 +010037 return 0;
38}
Sukadev Bhattiprolu9fb47652015-09-24 17:53:49 -040039#endif