From patchwork Wed Nov 20 11:48:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Monnet X-Patchwork-Id: 1198058 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="gDaccDhM"; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47J1Dd3n9Dz9sPf; Wed, 20 Nov 2019 22:48:49 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1iXOTN-0003jh-Ny; Wed, 20 Nov 2019 11:48:37 +0000 Received: from mail-wm1-f66.google.com ([209.85.128.66]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1iXOTL-0003jI-Cf for kernel-team@lists.ubuntu.com; Wed, 20 Nov 2019 11:48:35 +0000 Received: by mail-wm1-f66.google.com with SMTP id l17so6673228wmh.0 for ; Wed, 20 Nov 2019 03:48:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=BE/6/qls+KocXFx7ifR4VwKj5k1uxje4Kk9vuc9sFUI=; b=gDaccDhMss8+FxxZ8RvSYu3zZ2cr9FOaH+OIYbWQjSKgWYhsBLaSIWUc7Phw69NlMg VIpqsYKftvMeaIr9CraYCG+dSkay23MBBUxx3yJ1Mm6v4+gPwWqdI7CnVQkFwgD4Pbky whUe9gn/Zw8zOhyvVploabRXlBgErBq5hlmp+miu7I3OJLn40XbWALV72zhMS2NCppyo bRkhSJdBeGksFiQeVvoAkPkJLEtrfI+fwhgthGoxJtYEy//RXdfZvyuZdkWWMuoKmO34 lFQ6sOoFVerYLTrdYaVyQKjPOXhZz8cK9hiPVpqRLuT50g9CkB4r5R6xNMHDCqWsW37t zaQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=BE/6/qls+KocXFx7ifR4VwKj5k1uxje4Kk9vuc9sFUI=; b=iA/3scgbKI6Y8LRLnN6oRAwJsDNmRaEoEmoTC7AEbpwLyqmRAwWcamxstvxOuPxgIF n5I7s+S+v3mJIT755R5umP1B5E4kUheXk6jmZRk2AlKKHL1YCwY5iSV35z+MIEdCraTz NjhrnEAmajG/UHbx/ZXorJ0ja4MUJiPfApAaaT148Wb7CXntpEPpzxwhYvJFoqLmUX9Y 6v6S8P22pbYd94qQS7Aap4pa/Jznkzcv5s/fY//W/cgz1o9uFbj+s/wTqOyn0KJY3AOQ FcuPEOOVOSMv3vL+dtMZNE/OUiMuW6+1YVPPmqYcD3YcnIki4dv9OcWE3a6xH3hkSLlw gqYw== X-Gm-Message-State: APjAAAWsN3LSTc58myuDUSsS5Ztjg+sm8LPPILDIucoN2mv8yf7U54e4 Lq3agoTsnEEFQkUe2WK/3okHfwfrMaaiUjB2awyToVHEDyRZoTiquQecFvPGIgbHAd8OviNkxQg XRdNAUJfc5gVEiLi3NaXVgBV8zWYe2TtyIPBkIJbqa8crSJrO+eZJIiQSHWjerwUoB/HqtmTo2P XljuMwraXpIw== X-Google-Smtp-Source: APXvYqx4ywNrxiTM5+mSHWpDwgOBPzYR8IYfg4YkdFPSq0hnLAEwRMc8Q/JAcap3ceKY/zB5iCcg9w== X-Received: by 2002:a1c:f20c:: with SMTP id s12mr2558188wmc.37.1574250514671; Wed, 20 Nov 2019 03:48:34 -0800 (PST) Received: from cbtest32.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id x9sm29970062wru.32.2019.11.20.03.48.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Nov 2019 03:48:33 -0800 (PST) From: Quentin Monnet To: kernel-team@lists.ubuntu.com Subject: [SRU][BIONIC][PATCH v3 1/4] tools/bpftool: fix bpftool build with bintutils >= 2.9 Date: Wed, 20 Nov 2019 11:48:20 +0000 Message-Id: <20191120114823.27955-2-quentin.monnet@netronome.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191120114823.27955-1-quentin.monnet@netronome.com> References: <20191120114823.27955-1-quentin.monnet@netronome.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Borkmann , oss-drivers@netronome.com, Stanislav Fomichev , Nicolas Dichtel , Roman Gushchin MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Roman Gushchin BugLink: https://bugs.launchpad.net/bugs/1774815 Bpftool build is broken with binutils version 2.29 and later. The cause is commit 003ca0fd2286 ("Refactor disassembler selection") in the binutils repo, which changed the disassembler() function signature. Fix this by adding a new "feature" to the tools/build/features infrastructure and make it responsible for decision which disassembler() function signature to use. Signed-off-by: Roman Gushchin Cc: Jakub Kicinski Cc: Alexei Starovoitov Cc: Daniel Borkmann Acked-by: Jakub Kicinski Signed-off-by: Daniel Borkmann (backported from commit fb982666e380c1632a74495b68b3c33a66e76430) Signed-off-by: Quentin Monnet --- tools/bpf/Makefile | 29 +++++++++++++++++++ tools/bpf/bpf_jit_disasm.c | 7 +++++ tools/bpf/bpftool/Makefile | 24 +++++++++++++++ tools/bpf/bpftool/jit_disasm.c | 7 +++++ tools/build/feature/Makefile | 4 +++ .../feature/test-disassembler-four-args.c | 15 ++++++++++ 6 files changed, 86 insertions(+) create mode 100644 tools/build/feature/test-disassembler-four-args.c diff --git a/tools/bpf/Makefile b/tools/bpf/Makefile index 07a6697466ef..c8ec0ae16bf0 100644 --- a/tools/bpf/Makefile +++ b/tools/bpf/Makefile @@ -9,6 +9,35 @@ MAKE = make CFLAGS += -Wall -O2 CFLAGS += -D__EXPORTED_HEADERS__ -I../../include/uapi -I../../include +ifeq ($(srctree),) +srctree := $(patsubst %/,%,$(dir $(CURDIR))) +srctree := $(patsubst %/,%,$(dir $(srctree))) +endif + +FEATURE_USER = .bpf +FEATURE_TESTS = libbfd disassembler-four-args +FEATURE_DISPLAY = libbfd disassembler-four-args + +check_feat := 1 +NON_CHECK_FEAT_TARGETS := clean bpftool_clean +ifdef MAKECMDGOALS +ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) + check_feat := 0 +endif +endif + +ifeq ($(check_feat),1) +ifeq ($(FEATURES_DUMP),) +include $(srctree)/tools/build/Makefile.feature +else +include $(FEATURES_DUMP) +endif +endif + +ifeq ($(feature-disassembler-four-args), 1) +CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE +endif + %.yacc.c: %.y $(YACC) -o $@ -d $< diff --git a/tools/bpf/bpf_jit_disasm.c b/tools/bpf/bpf_jit_disasm.c index 75bf526a0168..30044bc4f389 100644 --- a/tools/bpf/bpf_jit_disasm.c +++ b/tools/bpf/bpf_jit_disasm.c @@ -72,7 +72,14 @@ static void get_asm_insns(uint8_t *image, size_t len, int opcodes) disassemble_init_for_target(&info); +#ifdef DISASM_FOUR_ARGS_SIGNATURE + disassemble = disassembler(info.arch, + bfd_big_endian(bfdf), + info.mach, + bfdf); +#else disassemble = disassembler(bfdf); +#endif assert(disassemble); do { diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile index ec3052c0b004..9e433c3f8bbe 100644 --- a/tools/bpf/bpftool/Makefile +++ b/tools/bpf/bpftool/Makefile @@ -55,6 +55,30 @@ CFLAGS += -W -Wall -Wextra -Wno-unused-parameter -Wshadow CFLAGS += -D__EXPORTED_HEADERS__ -I$(srctree)/tools/include/uapi -I$(srctree)/tools/include -I$(srctree)/tools/lib/bpf -I$(srctree)/kernel/bpf/ LIBS = -lelf -lbfd -lopcodes $(LIBBPF) +FEATURE_USER = .bpftool +FEATURE_TESTS = libbfd disassembler-four-args +FEATURE_DISPLAY = libbfd disassembler-four-args + +check_feat := 1 +NON_CHECK_FEAT_TARGETS := clean uninstall doc doc-clean doc-install doc-uninstall +ifdef MAKECMDGOALS +ifeq ($(filter-out $(NON_CHECK_FEAT_TARGETS),$(MAKECMDGOALS)),) + check_feat := 0 +endif +endif + +ifeq ($(check_feat),1) +ifeq ($(FEATURES_DUMP),) +include $(srctree)/tools/build/Makefile.feature +else +include $(FEATURES_DUMP) +endif +endif + +ifeq ($(feature-disassembler-four-args), 1) +CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE +endif + include $(wildcard *.d) all: $(OUTPUT)bpftool diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c index 86376f923d28..034d91284ae5 100644 --- a/tools/bpf/bpftool/jit_disasm.c +++ b/tools/bpf/bpftool/jit_disasm.c @@ -110,7 +110,14 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) disassemble_init_for_target(&info); +#ifdef DISASM_FOUR_ARGS_SIGNATURE + disassemble = disassembler(info.arch, + bfd_big_endian(bfdf), + info.mach, + bfdf); +#else disassemble = disassembler(bfdf); +#endif assert(disassemble); if (json_output) diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile index 15071cb176bc..3a0de97284ee 100644 --- a/tools/build/feature/Makefile +++ b/tools/build/feature/Makefile @@ -13,6 +13,7 @@ FILES= \ test-hello.bin \ test-libaudit.bin \ test-libbfd.bin \ + test-disassembler-four-args.bin \ test-libbfd-liberty.bin \ test-libbfd-liberty-z.bin \ test-cplus-demangle.bin \ @@ -188,6 +189,9 @@ $(OUTPUT)test-libpython-version.bin: $(OUTPUT)test-libbfd.bin: $(BUILD) -DPACKAGE='"perf"' -lbfd -ldl +$(OUTPUT)test-disassembler-four-args.bin: + $(BUILD) -lbfd -lopcodes + $(OUTPUT)test-libbfd-liberty.bin: $(CC) $(CFLAGS) -Wall -Werror -o $@ test-libbfd.c -DPACKAGE='"perf"' $(LDFLAGS) -lbfd -ldl -liberty diff --git a/tools/build/feature/test-disassembler-four-args.c b/tools/build/feature/test-disassembler-four-args.c new file mode 100644 index 000000000000..45ce65cfddf0 --- /dev/null +++ b/tools/build/feature/test-disassembler-four-args.c @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include + +int main(void) +{ + bfd *abfd = bfd_openr(NULL, NULL); + + disassembler(bfd_get_arch(abfd), + bfd_big_endian(abfd), + bfd_get_mach(abfd), + abfd); + + return 0; +}