perf annotate: Work with vmlinux outside symfs
It is currently possible to use --symfs along with a vmlinux which lies outside of the symfs by passing an absolute path to --vmlinux, thanks to the check in dso__load_vmlinux() which handles this explicitly. However, the annotate code lacks this check and thus 'perf annotate' does not work ("Internal error: Invalid -1 error code") for kernel functions with this combination. Add the missing handling. Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: kernel@axis.com Link: https://lore.kernel.org/r/20221125114210.2353820-1-vincent.whitchurch@axis.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Родитель
f962514052
Коммит
66dc1920f6
|
@ -1731,7 +1731,10 @@ fallback:
|
|||
* cache, or is just a kallsyms file, well, lets hope that this
|
||||
* DSO is the same as when 'perf record' ran.
|
||||
*/
|
||||
__symbol__join_symfs(filename, filename_size, dso->long_name);
|
||||
if (dso->kernel && dso->long_name[0] == '/')
|
||||
snprintf(filename, filename_size, "%s", dso->long_name);
|
||||
else
|
||||
__symbol__join_symfs(filename, filename_size, dso->long_name);
|
||||
|
||||
mutex_lock(&dso->lock);
|
||||
if (access(filename, R_OK) && errno == ENOENT && dso->nsinfo) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче