summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/util/annotate.c19
-rw-r--r--tools/perf/util/annotate.h2
2 files changed, 17 insertions, 4 deletions
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index b49ecdd51188..4036c7f7b0fb 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1637,6 +1637,13 @@ int symbol__strerror_disassemble(struct symbol *sym __maybe_unused, struct map *
1637 case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING: 1637 case SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING:
1638 scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization."); 1638 scnprintf(buf, buflen, "Problems while parsing the CPUID in the arch specific initialization.");
1639 break; 1639 break;
1640 case SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE:
1641 scnprintf(buf, buflen, "Invalid BPF file: %s.", dso->long_name);
1642 break;
1643 case SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF:
1644 scnprintf(buf, buflen, "The %s BPF file has no BTF section, compile with -g or use pahole -J.",
1645 dso->long_name);
1646 break;
1640 default: 1647 default:
1641 scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum); 1648 scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum);
1642 break; 1649 break;
@@ -1719,13 +1726,13 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1719 char tpath[PATH_MAX]; 1726 char tpath[PATH_MAX];
1720 size_t buf_size; 1727 size_t buf_size;
1721 int nr_skip = 0; 1728 int nr_skip = 0;
1722 int ret = -1;
1723 char *buf; 1729 char *buf;
1724 bfd *bfdf; 1730 bfd *bfdf;
1731 int ret;
1725 FILE *s; 1732 FILE *s;
1726 1733
1727 if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO) 1734 if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO)
1728 return -1; 1735 return SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE;
1729 1736
1730 pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__, 1737 pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
1731 sym->name, sym->start, sym->end - sym->start); 1738 sym->name, sym->start, sym->end - sym->start);
@@ -1738,8 +1745,10 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1738 assert(bfd_check_format(bfdf, bfd_object)); 1745 assert(bfd_check_format(bfdf, bfd_object));
1739 1746
1740 s = open_memstream(&buf, &buf_size); 1747 s = open_memstream(&buf, &buf_size);
1741 if (!s) 1748 if (!s) {
1749 ret = errno;
1742 goto out; 1750 goto out;
1751 }
1743 init_disassemble_info(&info, s, 1752 init_disassemble_info(&info, s,
1744 (fprintf_ftype) fprintf); 1753 (fprintf_ftype) fprintf);
1745 1754
@@ -1748,8 +1757,10 @@ static int symbol__disassemble_bpf(struct symbol *sym,
1748 1757
1749 info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env, 1758 info_node = perf_env__find_bpf_prog_info(dso->bpf_prog.env,
1750 dso->bpf_prog.id); 1759 dso->bpf_prog.id);
1751 if (!info_node) 1760 if (!info_node) {
1761 return SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF;
1752 goto out; 1762 goto out;
1763 }
1753 info_linear = info_node->info_linear; 1764 info_linear = info_node->info_linear;
1754 sub_id = dso->bpf_prog.sub_id; 1765 sub_id = dso->bpf_prog.sub_id;
1755 1766
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index 116e21f49da6..d76fd0e81f46 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -372,6 +372,8 @@ enum symbol_disassemble_errno {
372 SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF, 372 SYMBOL_ANNOTATE_ERRNO__NO_LIBOPCODES_FOR_BPF,
373 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING, 373 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_CPUID_PARSING,
374 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP, 374 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP,
375 SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE,
376 SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF,
375 377
376 __SYMBOL_ANNOTATE_ERRNO__END, 378 __SYMBOL_ANNOTATE_ERRNO__END,
377}; 379};