aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/header.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r--tools/perf/util/header.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
index f65d7dc127b6..76e949a59ea4 100644
--- a/tools/perf/util/header.c
+++ b/tools/perf/util/header.c
@@ -946,6 +946,24 @@ u64 perf_header__sample_type(struct perf_header *header)
946 return type; 946 return type;
947} 947}
948 948
949bool perf_header__sample_id_all(const struct perf_header *header)
950{
951 bool value = false, first = true;
952 int i;
953
954 for (i = 0; i < header->attrs; i++) {
955 struct perf_header_attr *attr = header->attr[i];
956
957 if (first) {
958 value = attr->attr.sample_id_all;
959 first = false;
960 } else if (value != attr->attr.sample_id_all)
961 die("non matching sample_id_all");
962 }
963
964 return value;
965}
966
949struct perf_event_attr * 967struct perf_event_attr *
950perf_header__find_attr(u64 id, struct perf_header *header) 968perf_header__find_attr(u64 id, struct perf_header *header)
951{ 969{
@@ -987,21 +1005,23 @@ int event__synthesize_attr(struct perf_event_attr *attr, u16 ids, u64 *id,
987 1005
988 ev = malloc(size); 1006 ev = malloc(size);
989 1007
1008 if (ev == NULL)
1009 return -ENOMEM;
1010
990 ev->attr.attr = *attr; 1011 ev->attr.attr = *attr;
991 memcpy(ev->attr.id, id, ids * sizeof(u64)); 1012 memcpy(ev->attr.id, id, ids * sizeof(u64));
992 1013
993 ev->attr.header.type = PERF_RECORD_HEADER_ATTR; 1014 ev->attr.header.type = PERF_RECORD_HEADER_ATTR;
994 ev->attr.header.size = size; 1015 ev->attr.header.size = size;
995 1016
996 err = process(ev, session); 1017 err = process(ev, NULL, session);
997 1018
998 free(ev); 1019 free(ev);
999 1020
1000 return err; 1021 return err;
1001} 1022}
1002 1023
1003int event__synthesize_attrs(struct perf_header *self, 1024int event__synthesize_attrs(struct perf_header *self, event__handler_t process,
1004 event__handler_t process,
1005 struct perf_session *session) 1025 struct perf_session *session)
1006{ 1026{
1007 struct perf_header_attr *attr; 1027 struct perf_header_attr *attr;
@@ -1071,7 +1091,7 @@ int event__synthesize_event_type(u64 event_id, char *name,
1071 ev.event_type.header.size = sizeof(ev.event_type) - 1091 ev.event_type.header.size = sizeof(ev.event_type) -
1072 (sizeof(ev.event_type.event_type.name) - size); 1092 (sizeof(ev.event_type.event_type.name) - size);
1073 1093
1074 err = process(&ev, session); 1094 err = process(&ev, NULL, session);
1075 1095
1076 return err; 1096 return err;
1077} 1097}
@@ -1126,7 +1146,7 @@ int event__synthesize_tracing_data(int fd, struct perf_event_attr *pattrs,
1126 ev.tracing_data.header.size = sizeof(ev.tracing_data); 1146 ev.tracing_data.header.size = sizeof(ev.tracing_data);
1127 ev.tracing_data.size = aligned_size; 1147 ev.tracing_data.size = aligned_size;
1128 1148
1129 process(&ev, session); 1149 process(&ev, NULL, session);
1130 1150
1131 err = read_tracing_data(fd, pattrs, nb_events); 1151 err = read_tracing_data(fd, pattrs, nb_events);
1132 write_padded(fd, NULL, 0, padding); 1152 write_padded(fd, NULL, 0, padding);
@@ -1186,7 +1206,7 @@ int event__synthesize_build_id(struct dso *pos, u16 misc,
1186 ev.build_id.header.size = sizeof(ev.build_id) + len; 1206 ev.build_id.header.size = sizeof(ev.build_id) + len;
1187 memcpy(&ev.build_id.filename, pos->long_name, pos->long_name_len); 1207 memcpy(&ev.build_id.filename, pos->long_name, pos->long_name_len);
1188 1208
1189 err = process(&ev, session); 1209 err = process(&ev, NULL, session);
1190 1210
1191 return err; 1211 return err;
1192} 1212}