diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/perf/builtin-record.c | 7 | ||||
-rw-r--r-- | tools/perf/util/header.c | 14 |
2 files changed, 12 insertions, 9 deletions
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index e873ae2dd54..0abfb18b911 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -503,6 +503,13 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv) return err; } + if (!!rec->no_buildid + && !perf_header__has_feat(&session->header, HEADER_BUILD_ID)) { + pr_err("Couldn't generating buildids. " + "Use --no-buildid to profile anyway.\n"); + return -1; + } + rec->post_processing_offset = lseek(output, 0, SEEK_CUR); machine = perf_session__find_host_machine(session); diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 609d79b5fb5..71326836921 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -445,6 +445,9 @@ static int write_build_id(int fd, struct perf_header *h, session = container_of(h, struct perf_session, header); + if (!perf_session__read_build_ids(session, true)) + return -1; + err = dsos__write_buildid_table(h, fd); if (err < 0) { pr_debug("failed to write buildid table\n"); @@ -1417,10 +1420,6 @@ static int perf_header__adds_write(struct perf_header *header, session = container_of(header, struct perf_session, header); - if (perf_header__has_feat(header, HEADER_BUILD_ID && - !perf_session__read_build_ids(session, true))) - perf_header__clear_feat(header, HEADER_BUILD_ID); - nr_sections = bitmap_weight(header->adds_features, HEADER_FEAT_BITS); if (!nr_sections) return 0; @@ -1436,13 +1435,11 @@ static int perf_header__adds_write(struct perf_header *header, err = do_write_feat(fd, header, HEADER_TRACE_INFO, &p, evlist); if (err) - goto out_free; + perf_header__clear_feat(header, HEADER_TRACE_INFO); err = do_write_feat(fd, header, HEADER_BUILD_ID, &p, evlist); - if (err) { + if (err) perf_header__clear_feat(header, HEADER_BUILD_ID); - goto out_free; - } err = do_write_feat(fd, header, HEADER_HOSTNAME, &p, evlist); if (err) @@ -1500,7 +1497,6 @@ static int perf_header__adds_write(struct perf_header *header, err = do_write(fd, feat_sec, sec_size); if (err < 0) pr_debug("failed to write feature section\n"); -out_free: free(feat_sec); return err; } |