|
@@ -1396,10 +1396,11 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event,
|
|
array++;
|
|
array++;
|
|
|
|
|
|
if (data->user_regs.abi) {
|
|
if (data->user_regs.abi) {
|
|
- u64 regs_user = evsel->attr.sample_regs_user;
|
|
|
|
|
|
+ u64 mask = evsel->attr.sample_regs_user;
|
|
|
|
|
|
- sz = hweight_long(regs_user) * sizeof(u64);
|
|
|
|
|
|
+ sz = hweight_long(mask) * sizeof(u64);
|
|
OVERFLOW_CHECK(array, sz, max_size);
|
|
OVERFLOW_CHECK(array, sz, max_size);
|
|
|
|
+ data->user_regs.mask = mask;
|
|
data->user_regs.regs = (u64 *)array;
|
|
data->user_regs.regs = (u64 *)array;
|
|
array = (void *)array + sz;
|
|
array = (void *)array + sz;
|
|
}
|
|
}
|
|
@@ -1451,7 +1452,7 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event,
|
|
}
|
|
}
|
|
|
|
|
|
size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
|
|
size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
|
|
- u64 sample_regs_user, u64 read_format)
|
|
|
|
|
|
+ u64 read_format)
|
|
{
|
|
{
|
|
size_t sz, result = sizeof(struct sample_event);
|
|
size_t sz, result = sizeof(struct sample_event);
|
|
|
|
|
|
@@ -1517,7 +1518,7 @@ size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
|
|
if (type & PERF_SAMPLE_REGS_USER) {
|
|
if (type & PERF_SAMPLE_REGS_USER) {
|
|
if (sample->user_regs.abi) {
|
|
if (sample->user_regs.abi) {
|
|
result += sizeof(u64);
|
|
result += sizeof(u64);
|
|
- sz = hweight_long(sample_regs_user) * sizeof(u64);
|
|
|
|
|
|
+ sz = hweight_long(sample->user_regs.mask) * sizeof(u64);
|
|
result += sz;
|
|
result += sz;
|
|
} else {
|
|
} else {
|
|
result += sizeof(u64);
|
|
result += sizeof(u64);
|
|
@@ -1546,7 +1547,7 @@ size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
|
|
}
|
|
}
|
|
|
|
|
|
int perf_event__synthesize_sample(union perf_event *event, u64 type,
|
|
int perf_event__synthesize_sample(union perf_event *event, u64 type,
|
|
- u64 sample_regs_user, u64 read_format,
|
|
|
|
|
|
+ u64 read_format,
|
|
const struct perf_sample *sample,
|
|
const struct perf_sample *sample,
|
|
bool swapped)
|
|
bool swapped)
|
|
{
|
|
{
|
|
@@ -1687,7 +1688,7 @@ int perf_event__synthesize_sample(union perf_event *event, u64 type,
|
|
if (type & PERF_SAMPLE_REGS_USER) {
|
|
if (type & PERF_SAMPLE_REGS_USER) {
|
|
if (sample->user_regs.abi) {
|
|
if (sample->user_regs.abi) {
|
|
*array++ = sample->user_regs.abi;
|
|
*array++ = sample->user_regs.abi;
|
|
- sz = hweight_long(sample_regs_user) * sizeof(u64);
|
|
|
|
|
|
+ sz = hweight_long(sample->user_regs.mask) * sizeof(u64);
|
|
memcpy(array, sample->user_regs.regs, sz);
|
|
memcpy(array, sample->user_regs.regs, sz);
|
|
array = (void *)array + sz;
|
|
array = (void *)array + sz;
|
|
} else {
|
|
} else {
|