Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp2702617iob; Sat, 30 Apr 2022 16:59:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxest0229T6s+YXHyNSzNVvjZzexP2QFpIqalioR+S81Wt4dQOhBGk/I1OJozr22JBr0Ddt X-Received: by 2002:a05:6512:20cc:b0:471:f6fb:dac9 with SMTP id u12-20020a05651220cc00b00471f6fbdac9mr4426559lfr.475.1651363170803; Sat, 30 Apr 2022 16:59:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651363170; cv=none; d=google.com; s=arc-20160816; b=wIdHOoQJ+meZJKUez60/bm7KxOkEdcY/AW7lYKehF1nDETKfdyY6phbLJzXTz3Xl+m +sHGo/EbmxBH9rgqKo/cW+KaO6okdl6ZxbipRk8tZxrkBX/JgTSYxZtUQJDNxkoxCvjl TnAGzo4BY2nnt++KyRf4/7rckK/48+JMH8y0vrhDYlTqb7w7hSWtajcT5meej89cJM5t axJOy96hPjQReN/fMvayDnXNjeyNveiQZODm8Kx8BAmxFa3z7q/Ar3zEF7PL9c/pShhQ AkpoWlg6Bzo+l1yOdu8+nsmo/nFo6nzcaLJaHutXhwrPqT9Rz7qUl2OnVudNB6YQFlpO D5gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=NNbdnm6VF5w4R3+oVI1cQUGY2fGXX9HDrHfwIJGLLqc=; b=lsUx4/yQkfGOt4zxmBmJTLgKGNpF4rhJK3m1iYfpCyyXuU30/qCt56o130NtCewH0h KglkivRRohQklXD8mSn3v1G7vpsin254eIz6Ctl0KE4A/KNtL3S9uxWkYfS6sTIib95q aBB/R5UrqaugrEupiK5U6AxJcalESNvSWXBHR0+joCgXM6mLVJfnvMK60XfXV9UXC8CS jZWQhhNCd1h69UPBhC+x9al5VKmLKJw43ZSNCvJUixyj7lpUduZKaJqJFVhuSHUlxPUK oX8Yc5TI7f/VfeSffVGEqKDEiSxT05VT7ovGpFs/JmsgM8HTAeK0hzl6GXLAAA4B/7hn NpGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UNCEw+9u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p16-20020a056512235000b004719da9892bsi2738972lfu.404.2022.04.30.16.59.04; Sat, 30 Apr 2022 16:59:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=UNCEw+9u; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345481AbiD1LVB (ORCPT + 99 others); Thu, 28 Apr 2022 07:21:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230231AbiD1LVA (ORCPT ); Thu, 28 Apr 2022 07:21:00 -0400 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8016C5B3F8; Thu, 28 Apr 2022 04:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651144666; x=1682680666; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=YSpDATXy/AEnQCqNpDDdMNwfxMpapZmzIYX8S6XiNuc=; b=UNCEw+9uLr5Fn5MbiSDzlVu+rRI5AlBUArUaSc3XLcD79z9Vu0VA6EdT XKy6vO8vqDM5NavO1+sawdmeTAZ4Ltc5POW1WXvyUH4Z8Zq7+yW9nQBq0 hOVsLuvqoAxrfzKdS8cPmbWY+Pm0WoGNSag89B0zSre+ykrBj+VQm77Uy KXNI1KNZamSMaLbJgwkafRugh4O17n0hSQZU1MHDcQb7+xR1J3MXGG2PR AHAiucQ5hWqwooEThuqV8ygn7skZqk9cvy1I5kkpew8zdhz0ee4VuXy6m NusN34vx6l785y2/OyNiLhGcCK0Cun6mFX8jEDnRzIpZeaMx2XPAixr2k Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10330"; a="266069735" X-IronPort-AV: E=Sophos;i="5.90,295,1643702400"; d="scan'208";a="266069735" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Apr 2022 04:17:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,295,1643702400"; d="scan'208";a="682532655" Received: from irvmail001.ir.intel.com ([10.43.11.63]) by orsmga004.jf.intel.com with ESMTP; 28 Apr 2022 04:17:43 -0700 Received: from lincoln.igk.intel.com (lincoln.igk.intel.com [10.102.21.235]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 23SBHfQK002736; Thu, 28 Apr 2022 12:17:42 +0100 From: Larysa Zaremba To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , Maciej Fijalkowski , Larysa Zaremba , Alexander Lobakin Subject: [PATCH] bpftool: Use sysfs vmlinux when dumping BTF by ID Date: Thu, 28 Apr 2022 13:08:40 +0200 Message-Id: <20220428110839.111042-1-larysa.zaremba@intel.com> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, dumping almost all BTFs specified by id requires using the -B option to pass the base BTF. For most cases the vmlinux BTF sysfs path should work. This patch simplifies dumping by ID usage by attempting to use vmlinux BTF from sysfs, if the first try of loading BTF by ID fails with certain conditions. Signed-off-by: Larysa Zaremba Reviewed-by: Alexander Lobakin --- tools/bpf/bpftool/btf.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c index a2c665beda87..557f65e2de5c 100644 --- a/tools/bpf/bpftool/btf.c +++ b/tools/bpf/bpftool/btf.c @@ -459,6 +459,22 @@ static int dump_btf_c(const struct btf *btf, return err; } +static const char sysfs_vmlinux[] = "/sys/kernel/btf/vmlinux"; + +static struct btf *get_vmlinux_btf_from_sysfs(void) +{ + struct btf *base; + + base = btf__parse(sysfs_vmlinux, NULL); + if (libbpf_get_error(base)) { + p_err("failed to parse vmlinux BTF at '%s': %ld\n", + sysfs_vmlinux, libbpf_get_error(base)); + base = NULL; + } + + return base; +} + static int do_dump(int argc, char **argv) { struct btf *btf = NULL, *base = NULL; @@ -536,18 +552,11 @@ static int do_dump(int argc, char **argv) NEXT_ARG(); } else if (is_prefix(src, "file")) { const char sysfs_prefix[] = "/sys/kernel/btf/"; - const char sysfs_vmlinux[] = "/sys/kernel/btf/vmlinux"; if (!base_btf && strncmp(*argv, sysfs_prefix, sizeof(sysfs_prefix) - 1) == 0 && - strcmp(*argv, sysfs_vmlinux) != 0) { - base = btf__parse(sysfs_vmlinux, NULL); - if (libbpf_get_error(base)) { - p_err("failed to parse vmlinux BTF at '%s': %ld\n", - sysfs_vmlinux, libbpf_get_error(base)); - base = NULL; - } - } + strcmp(*argv, sysfs_vmlinux)) + base = get_vmlinux_btf_from_sysfs(); btf = btf__parse_split(*argv, base ?: base_btf); err = libbpf_get_error(btf); @@ -593,6 +602,14 @@ static int do_dump(int argc, char **argv) if (!btf) { btf = btf__load_from_kernel_by_id_split(btf_id, base_btf); err = libbpf_get_error(btf); + if (err == -EINVAL && !base_btf) { + btf__free(base); + base = get_vmlinux_btf_from_sysfs(); + p_info("Warning: valid base BTF was not specified with -B option, falling back on standard base BTF (sysfs vmlinux)"); + btf = btf__load_from_kernel_by_id_split(btf_id, base); + err = libbpf_get_error(btf); + } + if (err) { p_err("get btf by id (%u): %s", btf_id, strerror(err)); goto done; -- 2.35.1