tools/perf/util/annotate.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
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>
---
tools/perf/util/annotate.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index db475e44f42f..52bdec764545 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1695,7 +1695,11 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
* 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) {
--
2.34.1
On Fri, 2022-11-25 at 12:42 +0100, Vincent Whitchurch wrote: > 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> This patch was not merged and I did not receive any comments on it either. Should I resend it? It still applies cleanly to current mainline. Thanks.
Em Fri, Jun 16, 2023 at 10:21:52AM +0000, Vincent Whitchurch escreveu: > On Fri, 2022-11-25 at 12:42 +0100, Vincent Whitchurch wrote: > > 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> > > This patch was not merged and I did not receive any comments on it > either. Should I resend it? It still applies cleanly to current > mainline. Thanks. Thanks for the ping, I checked dso__load_vmlinux() and it has: if (vmlinux[0] == '/') snprintf(symfs_vmlinux, sizeof(symfs_vmlinux), "%s", vmlinux); else symbol__join_symfs(symfs_vmlinux, vmlinux) Exactly as you pointed out, applied. - Arnaldo
© 2016 - 2025 Red Hat, Inc.