blob: 2774cec1f15fa0561f8e68ae01cb03c3757a8c14 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Jiri Olsac9b951c42014-01-07 13:47:29 +01002#include <errno.h>
3#include "perf_regs.h"
Jiri Olsa0c4e7742014-04-17 19:39:10 +02004#include "event.h"
Jiri Olsac9b951c42014-01-07 13:47:29 +01005
Stephane Eranianaf4aead2015-09-01 11:30:14 +02006const struct sample_reg __weak sample_reg_masks[] = {
7 SMPL_REG_END
8};
9
Ravi Bangoriad451a202017-03-28 15:17:53 +053010int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
11 char **new_op __maybe_unused)
Alexis Berlemont3b1f8312016-12-14 01:07:32 +010012{
Ravi Bangoriad451a202017-03-28 15:17:53 +053013 return SDT_ARG_SKIP;
Alexis Berlemont3b1f8312016-12-14 01:07:32 +010014}
15
Kan Liangaf785e72019-05-14 13:19:33 -070016uint64_t __weak arch__intr_reg_mask(void)
17{
18 return PERF_REGS_MASK;
19}
20
21uint64_t __weak arch__user_reg_mask(void)
22{
23 return PERF_REGS_MASK;
24}
25
Sukadev Bhattiprolu9fb47652015-09-24 17:53:49 -040026#ifdef HAVE_PERF_REGS_SUPPORT
Jiri Olsac9b951c42014-01-07 13:47:29 +010027int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
28{
29 int i, idx = 0;
30 u64 mask = regs->mask;
31
Naveen N. Raof4782202016-04-28 15:01:10 +053032 if (regs->cache_mask & (1ULL << id))
Jiri Olsa0c4e7742014-04-17 19:39:10 +020033 goto out;
34
Naveen N. Raof4782202016-04-28 15:01:10 +053035 if (!(mask & (1ULL << id)))
Jiri Olsac9b951c42014-01-07 13:47:29 +010036 return -EINVAL;
37
38 for (i = 0; i < id; i++) {
Naveen N. Raof4782202016-04-28 15:01:10 +053039 if (mask & (1ULL << i))
Jiri Olsac9b951c42014-01-07 13:47:29 +010040 idx++;
41 }
42
Naveen N. Raof4782202016-04-28 15:01:10 +053043 regs->cache_mask |= (1ULL << id);
Jiri Olsa0c4e7742014-04-17 19:39:10 +020044 regs->cache_regs[id] = regs->regs[idx];
45
46out:
47 *valp = regs->cache_regs[id];
Jiri Olsac9b951c42014-01-07 13:47:29 +010048 return 0;
49}
Sukadev Bhattiprolu9fb47652015-09-24 17:53:49 -040050#endif