pub const PERF_RECORD_SAMPLE: i32 = 9;
struct {
struct perf_event_header header;
#
# Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.
# The advantage of PERF_SAMPLE_IDENTIFIER is that its position
# is fixed relative to header.
#
{ u64 id; } && PERF_SAMPLE_IDENTIFIER
{ u64 ip; } && PERF_SAMPLE_IP
{ u32 pid, tid; } && PERF_SAMPLE_TID
{ u64 time; } && PERF_SAMPLE_TIME
{ u64 addr; } && PERF_SAMPLE_ADDR
{ u64 id; } && PERF_SAMPLE_ID
{ u64 stream_id; } && PERF_SAMPLE_STREAM_ID
{ u32 cpu, res; } && PERF_SAMPLE_CPU
{ u64 period; } && PERF_SAMPLE_PERIOD
{ struct read_format values; } && PERF_SAMPLE_READ
{ u64 nr;
u64 ips[nr]; } && PERF_SAMPLE_CALLCHAIN
#
# The RAW record below is opaque data wrt the ABI
#
# That is, the ABI doesn't make any promises wrt to
# the stability of its content, it may vary depending
# on event, hardware, kernel version and phase of
# the moon.
#
# In other words, PERF_SAMPLE_RAW contents are not an ABI.
#
{ u32 size;
char data[size]; }&& PERF_SAMPLE_RAW
{ u64 nr;
{ u64 from, to, flags } lbr[nr];} && PERF_SAMPLE_BRANCH_STACK
{ u64 abi; # enum perf_sample_regs_abi
u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_USER
{ u64 size;
char data[size];
u64 dyn_size; } && PERF_SAMPLE_STACK_USER
{ u64 weight; } && PERF_SAMPLE_WEIGHT
{ u64 data_src; } && PERF_SAMPLE_DATA_SRC
{ u64 transaction; } && PERF_SAMPLE_TRANSACTION
{ u64 abi; # enum perf_sample_regs_abi
u64 regs[weight(mask)]; } && PERF_SAMPLE_REGS_INTR
{ u64 phys_addr;} && PERF_SAMPLE_PHYS_ADDR
};