perf annotate: Fix build on 32 bit for BPF annotation [Linux 5.1]

perf annotate: Fix build on 32 bit for BPF annotation [Linux 5.1]

This Linux kernel change "perf annotate: Fix build on 32 bit for BPF annotation" is included in the Linux 5.1 release. This change is authored by Thadeu Lima de Souza Cascardo <cascardo [at] canonical.com> on Wed Apr 3 16:44:52 2019 -0300. The commit for this change in Linux stable tree is 01e985e (patch).

perf annotate: Fix build on 32 bit for BPF annotation

Commit 6987561c9e86 ("perf annotate: Enable annotation of BPF programs") adds
support for BPF programs annotations but the new code does not build on 32-bit.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Acked-by: Song Liu <songliubraving@fb.com>
Fixes: 6987561c9e86 ("perf annotate: Enable annotation of BPF programs")
Link: http://lkml.kernel.org/r/20190403194452.10845-1-cascardo@canonical.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

There are 8 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 tools/perf/util/annotate.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index c8b0117..0976298 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1714,8 +1714,8 @@ static int symbol__disassemble_bpf(struct symbol *sym,
    if (dso->binary_type != DSO_BINARY_TYPE__BPF_PROG_INFO)
        return -1;

-   pr_debug("%s: handling sym %s addr %lx len %lx\n", __func__,
-        sym->name, sym->start, sym->end - sym->start);
+   pr_debug("%s: handling sym %s addr %" PRIx64 " len %" PRIx64 "\n", __func__,
+         sym->name, sym->start, sym->end - sym->start);

    memset(tpath, 0, sizeof(tpath));
    perf_exe(tpath, sizeof(tpath));
@@ -1740,7 +1740,7 @@ static int symbol__disassemble_bpf(struct symbol *sym,
    info_linear = info_node->info_linear;
    sub_id = dso->bpf_prog.sub_id;

-   info.buffer = (void *)(info_linear->info.jited_prog_insns);
+   info.buffer = (void *)(uintptr_t)(info_linear->info.jited_prog_insns);
    info.buffer_length = info_linear->info.jited_prog_len;

    if (info_linear->info.nr_line_info)
@@ -1776,7 +1776,7 @@ static int symbol__disassemble_bpf(struct symbol *sym,
        const char *srcline;
        u64 addr;

-       addr = pc + ((u64 *)(info_linear->info.jited_ksyms))[sub_id];
+       addr = pc + ((u64 *)(uintptr_t)(info_linear->info.jited_ksyms))[sub_id];
        count = disassemble(pc, &info);

        if (prog_linfo)

Leave a Reply

Your email address will not be published. Required fields are marked *