4 #include "thread_map.h"
8 int test__syscall_open_tp_fields(void)
10 struct record_opts opts
= {
20 const char *filename
= "/etc/passwd";
21 int flags
= O_RDONLY
| O_DIRECTORY
;
22 struct perf_evlist
*evlist
= perf_evlist__new();
23 struct perf_evsel
*evsel
;
24 int err
= -1, i
, nr_events
= 0, nr_polls
= 0;
27 pr_debug("%s: perf_evlist__new\n", __func__
);
31 evsel
= perf_evsel__newtp("syscalls", "sys_enter_open");
33 pr_debug("%s: perf_evsel__newtp\n", __func__
);
34 goto out_delete_evlist
;
37 perf_evlist__add(evlist
, evsel
);
39 err
= perf_evlist__create_maps(evlist
, &opts
.target
);
41 pr_debug("%s: perf_evlist__create_maps\n", __func__
);
42 goto out_delete_evlist
;
45 perf_evsel__config(evsel
, &opts
);
47 evlist
->threads
->map
[0] = getpid();
49 err
= perf_evlist__open(evlist
);
51 pr_debug("perf_evlist__open: %s\n", strerror(errno
));
52 goto out_delete_evlist
;
55 err
= perf_evlist__mmap(evlist
, UINT_MAX
, false);
57 pr_debug("perf_evlist__mmap: %s\n", strerror(errno
));
58 goto out_delete_evlist
;
61 perf_evlist__enable(evlist
);
66 open(filename
, flags
);
69 int before
= nr_events
;
71 for (i
= 0; i
< evlist
->nr_mmaps
; i
++) {
72 union perf_event
*event
;
74 while ((event
= perf_evlist__mmap_read(evlist
, i
)) != NULL
) {
75 const u32 type
= event
->header
.type
;
77 struct perf_sample sample
;
81 if (type
!= PERF_RECORD_SAMPLE
) {
82 perf_evlist__mmap_consume(evlist
, i
);
86 err
= perf_evsel__parse_sample(evsel
, event
, &sample
);
88 pr_err("Can't parse sample, err = %d\n", err
);
89 goto out_delete_evlist
;
92 tp_flags
= perf_evsel__intval(evsel
, &sample
, "flags");
94 if (flags
!= tp_flags
) {
95 pr_debug("%s: Expected flags=%#x, got %#x\n",
96 __func__
, flags
, tp_flags
);
97 goto out_delete_evlist
;
104 if (nr_events
== before
)
105 poll(evlist
->pollfd
, evlist
->nr_fds
, 10);
107 if (++nr_polls
> 5) {
108 pr_debug("%s: no events!\n", __func__
);
109 goto out_delete_evlist
;
115 perf_evlist__delete(evlist
);
This page took 0.032496 seconds and 5 git commands to generate.