4 #include "thread_map.h"
7 int test__syscall_open_tp_fields(void)
9 struct perf_record_opts opts
= {
19 const char *filename
= "/etc/passwd";
20 int flags
= O_RDONLY
| O_DIRECTORY
;
21 struct perf_evlist
*evlist
= perf_evlist__new();
22 struct perf_evsel
*evsel
;
23 int err
= -1, i
, nr_events
= 0, nr_polls
= 0;
26 pr_debug("%s: perf_evlist__new\n", __func__
);
30 evsel
= perf_evsel__newtp("syscalls", "sys_enter_open", 0);
32 pr_debug("%s: perf_evsel__newtp\n", __func__
);
33 goto out_delete_evlist
;
36 perf_evlist__add(evlist
, evsel
);
38 err
= perf_evlist__create_maps(evlist
, &opts
.target
);
40 pr_debug("%s: perf_evlist__create_maps\n", __func__
);
41 goto out_delete_evlist
;
44 perf_evsel__config(evsel
, &opts
);
46 evlist
->threads
->map
[0] = getpid();
48 err
= perf_evlist__open(evlist
);
50 pr_debug("perf_evlist__open: %s\n", strerror(errno
));
54 err
= perf_evlist__mmap(evlist
, UINT_MAX
, false);
56 pr_debug("perf_evlist__mmap: %s\n", strerror(errno
));
57 goto out_close_evlist
;
60 perf_evlist__enable(evlist
);
65 open(filename
, flags
);
68 int before
= nr_events
;
70 for (i
= 0; i
< evlist
->nr_mmaps
; i
++) {
71 union perf_event
*event
;
73 while ((event
= perf_evlist__mmap_read(evlist
, i
)) != NULL
) {
74 const u32 type
= event
->header
.type
;
76 struct perf_sample sample
;
80 if (type
!= PERF_RECORD_SAMPLE
)
83 err
= perf_evsel__parse_sample(evsel
, event
, &sample
);
85 pr_err("Can't parse sample, err = %d\n", err
);
89 tp_flags
= perf_evsel__intval(evsel
, &sample
, "flags");
91 if (flags
!= tp_flags
) {
92 pr_debug("%s: Expected flags=%#x, got %#x\n",
93 __func__
, flags
, tp_flags
);
101 if (nr_events
== before
)
102 poll(evlist
->pollfd
, evlist
->nr_fds
, 10);
104 if (++nr_polls
> 5) {
105 pr_debug("%s: no events!\n", __func__
);
112 perf_evlist__munmap(evlist
);
114 perf_evlist__close(evlist
);
116 perf_evlist__delete_maps(evlist
);
118 perf_evlist__delete(evlist
);