Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf disasm: Return a proper error when not determining the file type

Before:

⬢ [acme@toolbox a]$ perf annotate --stdio2 -i acme-perf-injected.data 'java.lang.String com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int)'
Error:
Couldn't annotate java.lang.String com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int):
Internal error: Invalid -1 error code
⬢ [acme@toolbox a]$

After:

⬢ [acme@toolbox a]$ perf annotate --stdio2 -i acme-perf-injected.data 'java.lang.String com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int)'
Error:
Couldn't annotate java.lang.String com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int):
Couldn't determine the file /tmp/perf-3308868.map type.
⬢ [acme@toolbox a]$

Reported-by: Francesco Nigro <fnigro@redhat.com>
Reported-by: Ilan Green <igreen@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Yonatan Goldschmidt <yonatan.goldschmidt@granulate.io>
Link: https://lore.kernel.org/lkml/Z092D9-r_iOgwIWM@x1
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

+5 -1
+1
tools/perf/util/annotate.h
··· 441 441 SYMBOL_ANNOTATE_ERRNO__ARCH_INIT_REGEXP, 442 442 SYMBOL_ANNOTATE_ERRNO__BPF_INVALID_FILE, 443 443 SYMBOL_ANNOTATE_ERRNO__BPF_MISSING_BTF, 444 + SYMBOL_ANNOTATE_ERRNO__COULDNT_DETERMINE_FILE_TYPE, 444 445 445 446 __SYMBOL_ANNOTATE_ERRNO__END, 446 447 };
+4 -1
tools/perf/util/disasm.c
··· 1245 1245 scnprintf(buf, buflen, "The %s BPF file has no BTF section, compile with -g or use pahole -J.", 1246 1246 dso__long_name(dso)); 1247 1247 break; 1248 + case SYMBOL_ANNOTATE_ERRNO__COULDNT_DETERMINE_FILE_TYPE: 1249 + scnprintf(buf, buflen, "Couldn't determine the file %s type.", dso__long_name(dso)); 1250 + break; 1248 1251 default: 1249 1252 scnprintf(buf, buflen, "Internal error: Invalid %d error code\n", errnum); 1250 1253 break; ··· 2292 2289 } else if (dso__binary_type(dso) == DSO_BINARY_TYPE__BPF_IMAGE) { 2293 2290 return symbol__disassemble_bpf_image(sym, args); 2294 2291 } else if (dso__binary_type(dso) == DSO_BINARY_TYPE__NOT_FOUND) { 2295 - return -1; 2292 + return SYMBOL_ANNOTATE_ERRNO__COULDNT_DETERMINE_FILE_TYPE; 2296 2293 } else if (dso__is_kcore(dso)) { 2297 2294 kce.addr = map__rip_2objdump(map, sym->start); 2298 2295 kce.kcore_filename = symfs_filename;