perf header: Don't assume there's no attr info if no sample ids is provided

This primarily fixes perf-report, which didn't report the correct type
of event if perf-record was called to record one event different from
'cycles':

$ perf record -e instructions true
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.007 MB perf.data (~295 samples) ]

$ perf report | head -n1
# Events: 7 cycles

LPU-Reference: <m3mxor6nex.fsf@gmail.com>
Signed-off-by: Franck Bui-Huu <fbuihuu@gmail.com>

authored by Franck Bui-Huu and committed by Arnaldo Carvalho de Melo 60e67737 d214afbd

+8 -3
+8 -3
tools/perf/util/header.c
··· 946 947 /* 948 * We set id to -1 if the data file doesn't contain sample 949 - * ids. Check for this and avoid walking through the entire 950 - * list of ids which may be large. 951 */ 952 - if (id == -1ULL) 953 return NULL; 954 955 for (i = 0; i < header->attrs; i++) { 956 struct perf_header_attr *attr = header->attr[i];
··· 946 947 /* 948 * We set id to -1 if the data file doesn't contain sample 949 + * ids. This can happen when the data file contains one type 950 + * of event and in that case, the header can still store the 951 + * event attribute information. Check for this and avoid 952 + * walking through the entire list of ids which may be large. 953 */ 954 + if (id == -1ULL) { 955 + if (header->attrs > 0) 956 + return &header->attr[0]->attr; 957 return NULL; 958 + } 959 960 for (i = 0; i < header->attrs; i++) { 961 struct perf_header_attr *attr = header->attr[i];