diff options
Diffstat (limited to 'tools/perf/util/header.c')
-rw-r--r-- | tools/perf/util/header.c | 32 |
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 | ||
949 | bool 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 | |||
949 | struct perf_event_attr * | 967 | struct perf_event_attr * |
950 | perf_header__find_attr(u64 id, struct perf_header *header) | 968 | perf_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 | ||
1003 | int event__synthesize_attrs(struct perf_header *self, | 1024 | int 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 | } |