From patchwork Wed Nov 20 11:48:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Monnet X-Patchwork-Id: 1198054 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="Ezxbug1X"; 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 47J1Dc3HCDz9sPv; Wed, 20 Nov 2019 22:48:48 +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 1iXOTQ-0003kK-SJ; Wed, 20 Nov 2019 11:48:40 +0000 Received: from mail-wr1-f67.google.com ([209.85.221.67]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1iXOTN-0003jX-5h for kernel-team@lists.ubuntu.com; Wed, 20 Nov 2019 11:48:37 +0000 Received: by mail-wr1-f67.google.com with SMTP id w9so27794482wrr.0 for ; Wed, 20 Nov 2019 03:48:37 -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=uqIR1gXGcdqo3M+XBVKVLcIbv3ogn9T/GVEKBGOefn0=; b=Ezxbug1Xf3wionKSHj7O0594IVv5m3u6xYil6TJY0k+qxveGbvpeqnc/FXuvKRn1iI Le01gv3i4Ady5K5rwpogeoTKliTf8np4A002pXUl5n7/Nr6a0/+xVpypMRs590bEXt96 VmURBwdMw2GcXaomW+bF0yOY0JdiaU5LYIqB4RoRbU1kB8ku7k7A/vLiKMjSIPs0xnCP zmDWbhtFBl43TlCl/ZYBWxHEJ9VjxPk5JuoBLRGZLV6Gq//b8W9suzIyu73SyVDgogMC Mpzfb+/s7lH4SruwjLYDnm3F2Fd5QFDo+1B5dCpU4AhbZH0KfDW6jA+lKL3csbbjFr15 B00w== 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=uqIR1gXGcdqo3M+XBVKVLcIbv3ogn9T/GVEKBGOefn0=; b=lhH4vkZw5HJZL3Cdj+UuGie8gwCqq+KzykCBPDVfVwqHwWsLokTS/mvcg1E6f6WId1 Pmr9bSzN++60nBUDoDf7A00LmCSuXy2ZOV5KshP/RvmsHMNKIY9O/8CD9T1TcS6ysIiO XQQhYmxuvBKqzZqmDxsf5TYJOltNdY8XV0ozXZW5Q1UiCWw6PrMvde3FAG1VIi0vFa0O Glf0NdpUeaEtAn2DiXE6MPEuvUc9ZUSRXF9oT9pHB37MI9yHs5XXzLizUfqzQ7rX8pQX yPsDpD0F8urRX4PXDX0xXNjkp7lQ1SIFx7QWxDRM6S3nVFXa7kbaesbWkozOoRh+JIW1 I+JA== X-Gm-Message-State: APjAAAU04HAz+VGv2ICSmnjUA+UMrBY8BIixRTF/3QkyqnOBhJw597W9 VMp7z265uU+coCpt6Cz4+oP7hxwHN7T4NSQ38KR9rWHMSB6KVt/oTokcSY8ztdLa9jrEDEcnFYa GOWa94y5Uyxeh4Qtb0bNTqNAKjS8a+CJNRlS24HQoKgDMqLRqTmZlqrm2ubSZiTJ0hskromkkhP IcgbIoY8cD0A== X-Google-Smtp-Source: APXvYqyfebT8QQYDqrUWlYp2CF2yOQ93O+vy4TIUeKJlZx+G34iE5C2qscU8FdotmGag2cD9jFyYEA== X-Received: by 2002:adf:9d88:: with SMTP id p8mr2787142wre.286.1574250516564; Wed, 20 Nov 2019 03:48:36 -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.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Nov 2019 03:48:35 -0800 (PST) From: Quentin Monnet To: kernel-team@lists.ubuntu.com Subject: [SRU][BIONIC][PATCH v3 2/4] bpftool: make libbfd optional Date: Wed, 20 Nov 2019 11:48:21 +0000 Message-Id: <20191120114823.27955-3-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: Stanislav Fomichev BugLink: https://bugs.launchpad.net/bugs/1774815 Make it possible to build bpftool without libbfd. libbfd and libopcodes are typically provided in dev/dbg packages (binutils-dev in debian) which we usually don't have installed on the fleet machines and we'd like a way to have bpftool version that works without installing any additional packages. This excludes support for disassembling jit-ted code and prints an error if the user tries to use these features. Tested by: cat > FEATURES_DUMP.bpftool < Acked-by: Jakub Kicinski Signed-off-by: Alexei Starovoitov (backported from commit 29a9c10e4110e368443f0b606d71557edee7f2cc) Signed-off-by: Quentin Monnet --- tools/bpf/bpftool/Makefile | 13 +++++++++++-- tools/bpf/bpftool/jit_disasm.c | 6 ++++++ tools/bpf/bpftool/main.c | 3 --- tools/bpf/bpftool/main.h | 13 +++++++++++++ tools/bpf/bpftool/prog.c | 3 +++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile index 9e433c3f8bbe..b0a1cbde0819 100644 --- a/tools/bpf/bpftool/Makefile +++ b/tools/bpf/bpftool/Makefile @@ -53,7 +53,7 @@ CC = gcc CFLAGS += -O2 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) +LIBS = -lelf $(LIBBPF) FEATURE_USER = .bpftool FEATURE_TESTS = libbfd disassembler-four-args @@ -83,7 +83,16 @@ include $(wildcard *.d) all: $(OUTPUT)bpftool -SRCS=$(wildcard *.c) +BFD_SRCS = jit_disasm.c + +SRCS = $(filter-out $(BFD_SRCS),$(wildcard *.c)) + +ifeq ($(feature-libbfd),1) +CFLAGS += -DHAVE_LIBBFD_SUPPORT +SRCS += $(BFD_SRCS) +LIBS += -lbfd -lopcodes +endif + OBJS=$(patsubst %.c,$(OUTPUT)%.o,$(SRCS)) $(OUTPUT)disasm.o $(OUTPUT)disasm.o: $(srctree)/kernel/bpf/disasm.c diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c index 034d91284ae5..ec046e3061d6 100644 --- a/tools/bpf/bpftool/jit_disasm.c +++ b/tools/bpf/bpftool/jit_disasm.c @@ -170,3 +170,9 @@ void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) bfd_close(bfdf); } + +int disasm_init(void) +{ + bfd_init(); + return 0; +} diff --git a/tools/bpf/bpftool/main.c b/tools/bpf/bpftool/main.c index d294bc8168be..b11429bb65cb 100644 --- a/tools/bpf/bpftool/main.c +++ b/tools/bpf/bpftool/main.c @@ -33,7 +33,6 @@ /* Author: Jakub Kicinski */ -#include #include #include #include @@ -327,8 +326,6 @@ int main(int argc, char **argv) if (argc < 0) usage(); - bfd_init(); - ret = cmd_select(cmds, argc, argv, do_help); if (json_output) diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h index bff330b49791..af86de84ff30 100644 --- a/tools/bpf/bpftool/main.h +++ b/tools/bpf/bpftool/main.h @@ -117,7 +117,20 @@ int do_map(int argc, char **arg); int prog_parse_fd(int *argc, char ***argv); +#ifdef HAVE_LIBBFD_SUPPORT void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes); +int disasm_init(void); +#else +static inline +void disasm_print_insn(unsigned char *image, ssize_t len, int opcodes) +{ +} +static inline int disasm_init(void) +{ + p_err("No libbfd support"); + return -1; +} +#endif void print_hex_data_json(uint8_t *data, size_t len); #endif diff --git a/tools/bpf/bpftool/prog.c b/tools/bpf/bpftool/prog.c index 26df1a936ebf..caede2cd784a 100644 --- a/tools/bpf/bpftool/prog.c +++ b/tools/bpf/bpftool/prog.c @@ -521,6 +521,9 @@ static int do_dump(int argc, char **argv) int fd; if (is_prefix(*argv, "jited")) { + if (disasm_init()) + return -1; + member_len = &info.jited_prog_len; member_ptr = &info.jited_prog_insns; } else if (is_prefix(*argv, "xlated")) {