perf_event_open.2: Add type kprobe and uprobe

Two new types kprobe and uprobe are being added to
perf_event_open(), which allow creating kprobe or
uprobe with perf_event_open. This patch adds
information about these types.

Signed-off-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Song Liu 2018-01-09 11:39:26 -08:00 committed by Michael Kerrisk
parent 95b9ecbf9d
commit 7d8449ba19
1 changed files with 51 additions and 0 deletions

View File

@ -256,11 +256,15 @@ struct perf_event_attr {
union {
__u64 bp_addr; /* breakpoint address */
__u64 kprobe_func; /* for perf_kprobe */
__u64 uprobe_path; /* for perf_uprobe */
__u64 config1; /* extension of config */
};
union {
__u64 bp_len; /* breakpoint length */
__u64 kprobe_addr; /* with kprobe_func == NULL */
__u64 probe_offset; /* for perf_[k,u]probe */
__u64 config2; /* extension of config1 */
};
__u64 branch_sample_type; /* enum perf_branch_sample_type */
@ -336,6 +340,14 @@ field.
For instance,
.I /sys/bus/event_source/devices/cpu/type
contains the value for the core CPU PMU, which is usually 4.
.TP
.BR kprobe " and " uprobe " (since Linux 4.16)"
These two dynamic PMUs create a kprobe/uprobe and attach it to the
file descriptor generated by perf_event_open. The kprobe/uprobe
will be destroyed on the destruction of the file descriptor.
See fields
.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset
for more details.
.RE
.TP
.I "size"
@ -627,6 +639,45 @@ then leave
.I config
set to zero.
Its parameters are set in other places.
.PP
If
.I type
is
.BR kprobe
or
.BR uprobe ,
set
.IR retprobe
(bit 0 of
.IR config ,
see /sys/bus/event_source/devices/[k,u]probe/format/retprobe)
for kretprobe/uretprobe. See fields
.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset
for more details.
.RE
.TP
.IR kprobe_func ", " uprobe_path ", " kprobe_addr ", and " probe_offset
.EE
These fields describes the kprobe/uprobe for dynamic PMU
.BR kprobe
and
.BR uprobe .
For
.BR kprobe ": "
use
.I kprobe_func
and
.IR probe_offset ,
or use
.I kprobe_addr
and leave
.I kprobe_func
as NULL. For
.BR uprobe ": "
use
.I uprobe_path
and
.IR probe_offset .
.RE
.TP
.IR sample_period ", " sample_freq