hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/tools/perf/util/header.c
....@@ -3987,7 +3987,8 @@
39873987 union perf_event *event,
39883988 struct evlist **pevlist)
39893989 {
3990
- u32 i, ids, n_ids;
3990
+ u32 i, n_ids;
3991
+ u64 *ids;
39913992 struct evsel *evsel;
39923993 struct evlist *evlist = *pevlist;
39933994
....@@ -4003,9 +4004,8 @@
40034004
40044005 evlist__add(evlist, evsel);
40054006
4006
- ids = event->header.size;
4007
- ids -= (void *)&event->attr.id - (void *)event;
4008
- n_ids = ids / sizeof(u64);
4007
+ n_ids = event->header.size - sizeof(event->header) - event->attr.attr.size;
4008
+ n_ids = n_ids / sizeof(u64);
40094009 /*
40104010 * We don't have the cpu and thread maps on the header, so
40114011 * for allocating the perf_sample_id table we fake 1 cpu and
....@@ -4014,8 +4014,9 @@
40144014 if (perf_evsel__alloc_id(&evsel->core, 1, n_ids))
40154015 return -ENOMEM;
40164016
4017
+ ids = (void *)&event->attr.attr + event->attr.attr.size;
40174018 for (i = 0; i < n_ids; i++) {
4018
- perf_evlist__id_add(&evlist->core, &evsel->core, 0, i, event->attr.id[i]);
4019
+ perf_evlist__id_add(&evlist->core, &evsel->core, 0, i, ids[i]);
40194020 }
40204021
40214022 return 0;