|
@@ -4471,8 +4471,11 @@ static void perf_sample_regs_user(struct perf_regs *regs_user,
|
|
}
|
|
}
|
|
|
|
|
|
if (regs) {
|
|
if (regs) {
|
|
- regs_user->regs = regs;
|
|
|
|
regs_user->abi = perf_reg_abi(current);
|
|
regs_user->abi = perf_reg_abi(current);
|
|
|
|
+ regs_user->regs = regs;
|
|
|
|
+ } else {
|
|
|
|
+ regs_user->abi = PERF_SAMPLE_REGS_ABI_NONE;
|
|
|
|
+ regs_user->regs = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4947,12 +4950,13 @@ void perf_prepare_sample(struct perf_event_header *header,
|
|
header->size += size;
|
|
header->size += size;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (sample_type & (PERF_SAMPLE_REGS_USER | PERF_SAMPLE_STACK_USER))
|
|
|
|
+ perf_sample_regs_user(&data->regs_user, regs);
|
|
|
|
+
|
|
if (sample_type & PERF_SAMPLE_REGS_USER) {
|
|
if (sample_type & PERF_SAMPLE_REGS_USER) {
|
|
/* regs dump ABI info */
|
|
/* regs dump ABI info */
|
|
int size = sizeof(u64);
|
|
int size = sizeof(u64);
|
|
|
|
|
|
- perf_sample_regs_user(&data->regs_user, regs);
|
|
|
|
-
|
|
|
|
if (data->regs_user.regs) {
|
|
if (data->regs_user.regs) {
|
|
u64 mask = event->attr.sample_regs_user;
|
|
u64 mask = event->attr.sample_regs_user;
|
|
size += hweight64(mask) * sizeof(u64);
|
|
size += hweight64(mask) * sizeof(u64);
|
|
@@ -4968,15 +4972,11 @@ void perf_prepare_sample(struct perf_event_header *header,
|
|
* in case new sample type is added, because we could eat
|
|
* in case new sample type is added, because we could eat
|
|
* up the rest of the sample size.
|
|
* up the rest of the sample size.
|
|
*/
|
|
*/
|
|
- struct perf_regs *uregs = &data->regs_user;
|
|
|
|
u16 stack_size = event->attr.sample_stack_user;
|
|
u16 stack_size = event->attr.sample_stack_user;
|
|
u16 size = sizeof(u64);
|
|
u16 size = sizeof(u64);
|
|
|
|
|
|
- if (!uregs->abi)
|
|
|
|
- perf_sample_regs_user(uregs, regs);
|
|
|
|
-
|
|
|
|
stack_size = perf_sample_ustack_size(stack_size, header->size,
|
|
stack_size = perf_sample_ustack_size(stack_size, header->size,
|
|
- uregs->regs);
|
|
|
|
|
|
+ data->regs_user.regs);
|
|
|
|
|
|
/*
|
|
/*
|
|
* If there is something to dump, add space for the dump
|
|
* If there is something to dump, add space for the dump
|