lkml.org 
[lkml]   [2022]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 3/5] tools perf: Fix compilation error with new binutils
    Date
    binutils changed the signature of init_disassemble_info(), which now causes
    compilation failures for tools/perf/util/annotate.c, e.g. on debian
    unstable. Relevant binutils commit:
    https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07

    Wire up the feature test and switch to init_disassemble_info_compat(),
    which were introduced in prior commits, fixing the compilation failure.

    I verified that perf can still disassemble bpf programs by using bpftrace
    under load, recording a perf trace, and then annotating the bpf "function"
    with and without the changes. With old binutils there's no change in output
    before/after this patch. When comparing the output from old binutils (2.35)
    to new bintuils with the patch (upstream snapshot) there are a few output
    differences, but they are unrelated to this patch. An example hunk is:

    1.15 : 55:mov %rbp,%rdx
    0.00 : 58:add $0xfffffffffffffff8,%rdx
    0.00 : 5c:xor %ecx,%ecx
    - 1.03 : 5e:callq 0xffffffffe12aca3c
    + 1.03 : 5e:call 0xffffffffe12aca3c
    0.00 : 63:xor %eax,%eax
    - 2.18 : 65:leaveq
    - 2.82 : 66:retq
    + 2.18 : 65:leave
    + 2.82 : 66:ret

    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Sedat Dilek <sedat.dilek@gmail.com>
    Link: http://lore.kernel.org/lkml/20220622181918.ykrs5rsnmx3og4sv@alap3.anarazel.de
    Signed-off-by: Andres Freund <andres@anarazel.de>
    ---
    tools/perf/Makefile.config | 8 ++++++++
    tools/perf/util/annotate.c | 7 ++++---
    2 files changed, 12 insertions(+), 3 deletions(-)

    diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
    index 73e0762092fe..ee417c321adb 100644
    --- a/tools/perf/Makefile.config
    +++ b/tools/perf/Makefile.config
    @@ -298,6 +298,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
    FEATURE_CHECK_LDFLAGS-libaio = -lrt

    FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
    +FEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl

    CORE_CFLAGS += -fno-omit-frame-pointer
    CORE_CFLAGS += -ggdb3
    @@ -905,13 +906,16 @@ ifndef NO_LIBBFD
    ifeq ($(feature-libbfd-liberty), 1)
    EXTLIBS += -lbfd -lopcodes -liberty
    FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
    + FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
    else
    ifeq ($(feature-libbfd-liberty-z), 1)
    EXTLIBS += -lbfd -lopcodes -liberty -lz
    FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
    + FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -lz -ldl
    endif
    endif
    $(call feature_check,disassembler-four-args)
    + $(call feature_check,disassembler-init-styled)
    endif

    ifeq ($(feature-libbfd-buildid), 1)
    @@ -1025,6 +1029,10 @@ ifeq ($(feature-disassembler-four-args), 1)
    CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
    endif

    +ifeq ($(feature-disassembler-init-styled), 1)
    + CFLAGS += -DDISASM_INIT_STYLED
    +endif
    +
    ifeq (${IS_64_BIT}, 1)
    ifndef NO_PERF_READ_VDSO32
    $(call feature_check,compile-32)
    diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
    index 82cc396ef516..daea1867381d 100644
    --- a/tools/perf/util/annotate.c
    +++ b/tools/perf/util/annotate.c
    @@ -41,6 +41,7 @@
    #include <linux/string.h>
    #include <subcmd/parse-options.h>
    #include <subcmd/run-command.h>
    +#include <tools/dis-asm-compat.h>

    /* FIXME: For the HE_COLORSET */
    #include "ui/browser.h"
    @@ -1762,9 +1763,9 @@ static int symbol__disassemble_bpf(struct symbol *sym,
    ret = errno;
    goto out;
    }
    - init_disassemble_info(&info, s,
    - (fprintf_ftype) fprintf);
    -
    + init_disassemble_info_compat(&info, s,
    + (fprintf_ftype) fprintf,
    + fprintf_styled);
    info.arch = bfd_get_arch(bfdf);
    info.mach = bfd_get_mach(bfdf);

    --
    2.37.0.3.g30cc8d0f14
    \
     
     \ /
      Last update: 2022-07-03 23:28    [W:4.064 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site