.. | .. |
---|
2 | 2 | #include <errno.h> |
---|
3 | 3 | #include <string.h> |
---|
4 | 4 | #include <regex.h> |
---|
| 5 | +#include <linux/kernel.h> |
---|
| 6 | +#include <linux/zalloc.h> |
---|
5 | 7 | |
---|
6 | | -#include "../../perf.h" |
---|
7 | | -#include "../../util/util.h" |
---|
8 | | -#include "../../util/perf_regs.h" |
---|
9 | | -#include "../../util/debug.h" |
---|
| 8 | +#include "../../../perf-sys.h" |
---|
| 9 | +#include "../../../util/perf_regs.h" |
---|
| 10 | +#include "../../../util/debug.h" |
---|
| 11 | +#include "../../../util/event.h" |
---|
10 | 12 | |
---|
11 | 13 | const struct sample_reg sample_reg_masks[] = { |
---|
12 | 14 | SMPL_REG(AX, PERF_REG_X86_AX), |
---|
.. | .. |
---|
31 | 33 | SMPL_REG(R14, PERF_REG_X86_R14), |
---|
32 | 34 | SMPL_REG(R15, PERF_REG_X86_R15), |
---|
33 | 35 | #endif |
---|
| 36 | + SMPL_REG2(XMM0, PERF_REG_X86_XMM0), |
---|
| 37 | + SMPL_REG2(XMM1, PERF_REG_X86_XMM1), |
---|
| 38 | + SMPL_REG2(XMM2, PERF_REG_X86_XMM2), |
---|
| 39 | + SMPL_REG2(XMM3, PERF_REG_X86_XMM3), |
---|
| 40 | + SMPL_REG2(XMM4, PERF_REG_X86_XMM4), |
---|
| 41 | + SMPL_REG2(XMM5, PERF_REG_X86_XMM5), |
---|
| 42 | + SMPL_REG2(XMM6, PERF_REG_X86_XMM6), |
---|
| 43 | + SMPL_REG2(XMM7, PERF_REG_X86_XMM7), |
---|
| 44 | + SMPL_REG2(XMM8, PERF_REG_X86_XMM8), |
---|
| 45 | + SMPL_REG2(XMM9, PERF_REG_X86_XMM9), |
---|
| 46 | + SMPL_REG2(XMM10, PERF_REG_X86_XMM10), |
---|
| 47 | + SMPL_REG2(XMM11, PERF_REG_X86_XMM11), |
---|
| 48 | + SMPL_REG2(XMM12, PERF_REG_X86_XMM12), |
---|
| 49 | + SMPL_REG2(XMM13, PERF_REG_X86_XMM13), |
---|
| 50 | + SMPL_REG2(XMM14, PERF_REG_X86_XMM14), |
---|
| 51 | + SMPL_REG2(XMM15, PERF_REG_X86_XMM15), |
---|
34 | 52 | SMPL_REG_END |
---|
35 | 53 | }; |
---|
36 | 54 | |
---|
.. | .. |
---|
254 | 272 | |
---|
255 | 273 | return SDT_ARG_VALID; |
---|
256 | 274 | } |
---|
| 275 | + |
---|
| 276 | +uint64_t arch__intr_reg_mask(void) |
---|
| 277 | +{ |
---|
| 278 | + struct perf_event_attr attr = { |
---|
| 279 | + .type = PERF_TYPE_HARDWARE, |
---|
| 280 | + .config = PERF_COUNT_HW_CPU_CYCLES, |
---|
| 281 | + .sample_type = PERF_SAMPLE_REGS_INTR, |
---|
| 282 | + .sample_regs_intr = PERF_REG_EXTENDED_MASK, |
---|
| 283 | + .precise_ip = 1, |
---|
| 284 | + .disabled = 1, |
---|
| 285 | + .exclude_kernel = 1, |
---|
| 286 | + }; |
---|
| 287 | + int fd; |
---|
| 288 | + /* |
---|
| 289 | + * In an unnamed union, init it here to build on older gcc versions |
---|
| 290 | + */ |
---|
| 291 | + attr.sample_period = 1; |
---|
| 292 | + |
---|
| 293 | + event_attr_init(&attr); |
---|
| 294 | + |
---|
| 295 | + fd = sys_perf_event_open(&attr, 0, -1, -1, 0); |
---|
| 296 | + if (fd != -1) { |
---|
| 297 | + close(fd); |
---|
| 298 | + return (PERF_REG_EXTENDED_MASK | PERF_REGS_MASK); |
---|
| 299 | + } |
---|
| 300 | + |
---|
| 301 | + return PERF_REGS_MASK; |
---|
| 302 | +} |
---|