From patchwork Sat Oct 23 12:04:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 12579597 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BAC8C433EF for ; Sat, 23 Oct 2021 12:05:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 349D46109D for ; Sat, 23 Oct 2021 12:05:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230388AbhJWMHX (ORCPT ); Sat, 23 Oct 2021 08:07:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:20252 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230301AbhJWMHW (ORCPT ); Sat, 23 Oct 2021 08:07:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634990703; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7pkPbCBCtSDOxDhWztoOnPzXTRu2FzqqR8ZIAj4OW+A=; b=O5DAtshcu6CkDlTSlYbp9ATNMN+xLFQH1mV9qHDZn+Ji/EaHfMMlCrHV/0Ma/HLt3Kt1ML deoNrPTGErCky4LxAj/j0hM+GN3BR2pp/mOmFBHAqjWSpEwlcJFFxyUjYt1n2DvVMO5ETQ 0eAKGbr6PxD8/2puAXTtr7HybGGXnqY= Received: from mail-ed1-f70.google.com (mail-ed1-f70.google.com [209.85.208.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-152-2vCwnMSnOTC8RoC2Fd1DLQ-1; Sat, 23 Oct 2021 08:05:02 -0400 X-MC-Unique: 2vCwnMSnOTC8RoC2Fd1DLQ-1 Received: by mail-ed1-f70.google.com with SMTP id t18-20020a056402021200b003db9e6b0e57so6011551edv.10 for ; Sat, 23 Oct 2021 05:05:01 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7pkPbCBCtSDOxDhWztoOnPzXTRu2FzqqR8ZIAj4OW+A=; b=Gsbj6pPdf6NE/ywYchREbxwxJi2/Fd4xnmqvbhQvLuPDlbsFshTY7pvvhQamdOolJe 7Tc4OeQlwgjLJnNG2ewcf2EyM8xXMi6KnWgToi71PqB/4PVMCnNWMuhGiqbhqsZdY2id exR2CPVQOZmWZl2m4ITjkelwyTMCnUDXQJOFHum/t6DfOJoBXss5VjlVRuQG9rsYduOk OMIRMnGD4Z1LOZuj0DPKQgw0gIwr5mWMqK1xkb6CrnEOnvd4eaTwQSkquZ1g1+7UFPL/ 5OPYk84Ihsz1o5X8Gc2GdU9oIJ8QqSFTeinlB2QIqQOKvk/gOeHccPAxSDHNbPDNOYxF WoPQ== X-Gm-Message-State: AOAM5322cAUyeSwBNPC3UrhNANBhAT53DFZdsz15QXj8FMkMWB57Qpdc GT63NhXWoT186Xn5ckGFJ8jnBzkbOcBYwa7ilowdNk3Q2YygZwr8ve2SHLou59pQgbESO4JTP50 DNs20uOcEAewf38Vs X-Received: by 2002:a17:907:1112:: with SMTP id qu18mr1800236ejb.339.1634990700828; Sat, 23 Oct 2021 05:05:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzvZ/M4oO21mYOXJRaVLwZFvkyuM4bGGgYZ2+6RlWno479PHCZEcEWHuyzfK8kx96B1aloUSw== X-Received: by 2002:a17:907:1112:: with SMTP id qu18mr1800211ejb.339.1634990700622; Sat, 23 Oct 2021 05:05:00 -0700 (PDT) Received: from krava.cust.in.nbox.cz ([83.240.63.48]) by smtp.gmail.com with ESMTPSA id o25sm2132927ejc.22.2021.10.23.05.04.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Oct 2021 05:05:00 -0700 (PDT) From: Jiri Olsa X-Google-Original-From: Jiri Olsa To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh Subject: [PATCH bpf-next 1/2] kbuild: Unify options for BTF generation for vmlinux and modules Date: Sat, 23 Oct 2021 14:04:51 +0200 Message-Id: <20211023120452.212885-2-jolsa@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211023120452.212885-1-jolsa@kernel.org> References: <20211023120452.212885-1-jolsa@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net Using new PAHOLE_FLAGS variable to pass extra arguments to pahole for both vmlinux and modules BTF data generation. Adding new scripts/pahole-flags.sh script that detect and prints pahole options. Signed-off-by: Jiri Olsa Acked-by: Andrii Nakryiko --- Makefile | 3 +++ scripts/Makefile.modfinal | 2 +- scripts/link-vmlinux.sh | 11 +---------- scripts/pahole-flags.sh | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+), 11 deletions(-) create mode 100755 scripts/pahole-flags.sh diff --git a/Makefile b/Makefile index 437ccc66a1c2..ee514b80c62e 100644 --- a/Makefile +++ b/Makefile @@ -480,6 +480,8 @@ LZ4 = lz4c XZ = xz ZSTD = zstd +PAHOLE_FLAGS = $(shell PAHOLE=$(PAHOLE) scripts/pahole-flags.sh) + CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \ -Wbitwise -Wno-return-void -Wno-unknown-attribute $(CF) NOSTDINC_FLAGS := @@ -534,6 +536,7 @@ export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL +export PAHOLE_FLAGS # Files to ignore in find ... statements diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal index 1fb45b011e4b..7f39599e9fae 100644 --- a/scripts/Makefile.modfinal +++ b/scripts/Makefile.modfinal @@ -40,7 +40,7 @@ quiet_cmd_ld_ko_o = LD [M] $@ quiet_cmd_btf_ko = BTF [M] $@ cmd_btf_ko = \ if [ -f vmlinux ]; then \ - LLVM_OBJCOPY="$(OBJCOPY)" $(PAHOLE) -J --btf_base vmlinux $@; \ + LLVM_OBJCOPY="$(OBJCOPY)" $(PAHOLE) -J $(PAHOLE_FLAGS) --btf_base vmlinux $@; \ $(RESOLVE_BTFIDS) -b vmlinux $@; \ else \ printf "Skipping BTF generation for %s due to unavailability of vmlinux\n" $@ 1>&2; \ diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index d74cee5c4326..3ea7cece7c97 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -205,7 +205,6 @@ vmlinux_link() gen_btf() { local pahole_ver - local extra_paholeopt= if ! [ -x "$(command -v ${PAHOLE})" ]; then echo >&2 "BTF: ${1}: pahole (${PAHOLE}) is not available" @@ -220,16 +219,8 @@ gen_btf() vmlinux_link ${1} - if [ "${pahole_ver}" -ge "118" ] && [ "${pahole_ver}" -le "121" ]; then - # pahole 1.18 through 1.21 can't handle zero-sized per-CPU vars - extra_paholeopt="${extra_paholeopt} --skip_encoding_btf_vars" - fi - if [ "${pahole_ver}" -ge "121" ]; then - extra_paholeopt="${extra_paholeopt} --btf_gen_floats" - fi - info "BTF" ${2} - LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${extra_paholeopt} ${1} + LLVM_OBJCOPY="${OBJCOPY}" ${PAHOLE} -J ${PAHOLE_FLAGS} ${1} # Create ${2} which contains just .BTF section but no symbols. Add # SHF_ALLOC because .BTF will be part of the vmlinux image. --strip-all diff --git a/scripts/pahole-flags.sh b/scripts/pahole-flags.sh new file mode 100755 index 000000000000..2b99fc77019c --- /dev/null +++ b/scripts/pahole-flags.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +extra_paholeopt= + +if ! [ -x "$(command -v ${PAHOLE})" ]; then + return +fi + +pahole_ver=$(${PAHOLE} --version | sed -E 's/v([0-9]+)\.([0-9]+)/\1\2/') + +if [ "${pahole_ver}" -ge "118" ] && [ "${pahole_ver}" -le "121" ]; then + # pahole 1.18 through 1.21 can't handle zero-sized per-CPU vars + extra_paholeopt="${extra_paholeopt} --skip_encoding_btf_vars" +fi +if [ "${pahole_ver}" -ge "121" ]; then + extra_paholeopt="${extra_paholeopt} --btf_gen_floats" +fi + +echo ${extra_paholeopt} From patchwork Sat Oct 23 12:04:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 12579599 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AFC54C433F5 for ; Sat, 23 Oct 2021 12:05:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 92EEB6108D for ; Sat, 23 Oct 2021 12:05:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230419AbhJWMHd (ORCPT ); Sat, 23 Oct 2021 08:07:33 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:38956 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230358AbhJWMH2 (ORCPT ); Sat, 23 Oct 2021 08:07:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1634990709; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IclPFWVvkolcccbxu0IPirIhrTDIkZuCzmLS7DOYFgI=; b=F7/AvmiYUXEBXveAiEvvoux7jW15PdId053DOthOb+0LY+ISRZOvw3872ezNHrXPe84+/Y SJnAphh6iVTS0erFr2KVt8682c5ChJSEPPBI4Te/1oxPkJU5BfScIihnTn/SZZ4/4xrNcG VHmAxgl2gwfkawE0FtWcuqiLYf2fNx8= Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-436-UsPv9e-ONgeW6B4hqrBPNg-1; Sat, 23 Oct 2021 08:05:08 -0400 X-MC-Unique: UsPv9e-ONgeW6B4hqrBPNg-1 Received: by mail-ed1-f69.google.com with SMTP id p20-20020a50cd94000000b003db23619472so5984083edi.19 for ; Sat, 23 Oct 2021 05:05:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IclPFWVvkolcccbxu0IPirIhrTDIkZuCzmLS7DOYFgI=; b=QIMjvfcmZRHad29I4HeaAl0h1GGN1WV9wutymw115u46OUZ6R5qzG0MrS/AJ18W1d+ KZihEDgPD8DHvVVOvhJI3Flmyx4jqG5BrkVmPwycUZXKGioQMkPkxve6f6TMYF/rSxDk iCyk9Hl/qVNHx8Iocyuy1EYdCXjuH3K7QE2oxTQ78//If6u0+xrglJn3VOBPLOpBVWR0 /uxvNJqs1AQwC4ctnpO5r5YEfPMzB+u9a8c02PFbhdhXKgY+2x8/nLA4XPde1up5shwT cYqVmBfu4cq9v4hYHpaKJeFpDTLWfyXG0qJdIQnE2dzvsUglpnRaREIYDLvw1X3VQxL7 +5pw== X-Gm-Message-State: AOAM533fHzih1v+LnMM8ZnTOJl20nbz9uOU5VDVweuEN0svZkd24oLG7 g15Img/OBKwwoKUB4WqMbX/Zu9I01UHp+y9Qtcwtb7lgOHofCrzXl7PFLL0Hs/zZXOLKqCqIWxx eu0GM9W/yrXJzYmqu X-Received: by 2002:a17:906:2f16:: with SMTP id v22mr6949529eji.126.1634990706790; Sat, 23 Oct 2021 05:05:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwVtClV4NnnT26CqdfsxTrFouECxaoGO2mUCScs8FDHTQkHzWtwKNZICZbHvkvVlDCaqrNfwA== X-Received: by 2002:a17:906:2f16:: with SMTP id v22mr6949501eji.126.1634990706602; Sat, 23 Oct 2021 05:05:06 -0700 (PDT) Received: from krava.cust.in.nbox.cz ([83.240.63.48]) by smtp.gmail.com with ESMTPSA id ho17sm2117788ejc.101.2021.10.23.05.05.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Oct 2021 05:05:06 -0700 (PDT) From: Jiri Olsa X-Google-Original-From: Jiri Olsa To: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh Subject: [PATCH bpf-next 2/2] bpf: Add support to detect and dedup instances of same structs Date: Sat, 23 Oct 2021 14:04:52 +0200 Message-Id: <20211023120452.212885-3-jolsa@kernel.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211023120452.212885-1-jolsa@kernel.org> References: <20211023120452.212885-1-jolsa@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: bpf@iogearbox.net The s390x compiler generates multiple definitions of the same struct and dedup algorithm does not seem to handle this at the moment. I found code in dedup that seems to handle such situation for arrays, and added btf_dedup_is_equiv call for structs. With this change I can no longer see vmlinux's structs in kernel module BTF data, but I have no idea if that breaks anything else. Signed-off-by: Jiri Olsa --- tools/lib/bpf/btf.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c index 3a01c4b7f36a..ec164d0cee30 100644 --- a/tools/lib/bpf/btf.c +++ b/tools/lib/bpf/btf.c @@ -3920,8 +3920,16 @@ static int btf_dedup_is_equiv(struct btf_dedup *d, __u32 cand_id, * types within a single CU. So work around that by explicitly * allowing identical array types here. */ - return hypot_type_id == cand_id || - btf_dedup_identical_arrays(d, hypot_type_id, cand_id); + struct btf_type *t; + + if (hypot_type_id == cand_id) + return 1; + t = btf_type_by_id(d->btf, hypot_type_id); + if (btf_is_array(t)) + return btf_dedup_identical_arrays(d, hypot_type_id, cand_id); + if (btf_is_struct(t)) + return btf_dedup_is_equiv(d, hypot_type_id, cand_id); + return 0; } if (btf_dedup_hypot_map_add(d, canon_id, cand_id))