Received: by 2002:ab2:6857:0:b0:1ef:ffd0:ce49 with SMTP id l23csp2526152lqp; Mon, 25 Mar 2024 01:09:39 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXtNJRHWxGRstGgIr1CIndW5xzmNY6HDP242Z/d5hsqT9hb58nMnrlsJWb7f2uIE/zaNUfwq094hNtAhLe4KGoPy7x0iiZLnxZZiagChw== X-Google-Smtp-Source: AGHT+IE8NhKhg3B6oEtibxQwO4BexQ2XzZHwG7+Lo3UqUBBEaRp4CPSqSHd0Iw15abUb02sGkqLL X-Received: by 2002:a50:a6d1:0:b0:56a:ae8a:acc0 with SMTP id f17-20020a50a6d1000000b0056aae8aacc0mr530148edc.21.1711354179572; Mon, 25 Mar 2024 01:09:39 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1711354179; cv=pass; d=google.com; s=arc-20160816; b=QbIbxSVWk2l6+qXD53IW8P2ekqRn7oFhdQZO/Pu1LDONl2x2BoF+6PUtB0LWa8m//v kXmmANY4BscUk70uPGS//fqD5z2rxwB+zuWy7/AsboLZ7eih8u+AIXaSNnTC+e98vLKL TMFnpYDcI2ahhIgYLPaq5aUpIvG7CDT5GlSQW2bNmFB7L99P7R4RXEp/VZRm+tbbL03B cqAHt3W978po84eMBzoG+wKE3riM6Ta95xmgORYtVHR9Bczr4qQpaMWsgMEdbZLVR708 2rK7RV7ChKBZb4LKzSfgrwaLISmSNenBtyLmSw2BA2VWhzQMj9/kLLnb+LrS/+mAqzQ3 2+oA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=zhlx3/UGZ/H4x5Df9aQo19jhvnVEq61o1BNPGtbTwX0=; fh=8knUKui7Lxt7ZpXkOqOqBWBrFV+nrtzbxah37bv/d7c=; b=kNVLsMM9WhPO8nwBUJNs8c/8pqHy143cw7D5kWZ30uyaS47RgasQ7XN/L1JSOXLQ1Q sc0DaYBMjkbfxPqBD30KtYHUvIxOWBQrCP0N4/6lvJ7+EuvABNCrWyOIHA+F3EeSIH8B pY084NFy2L6YV6WxC8QKmaRR02OaiQvDunXCegv60QxS/Vt/ALTaEjtleMdOtv80QjVF 9m2TNkGWEDcrYHpM8TwCxHJQ8q4azrPg0ni0vUkkAMwgi0BrK/ovlNup9VnYUsi+6ot8 ClAhYeWj3nxfq3yf8zISgVRTFb/UooIBkJRWwSbDCwvBYSzDNd742x9xWW1huFUlYD/4 aY+Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SWUdZKRs; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-115839-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-115839-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id et10-20020a056402378a00b0056899ce83a0si2388253edb.293.2024.03.25.01.09.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Mar 2024 01:09:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-115839-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=SWUdZKRs; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-115839-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-115839-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id E96B01F306BD for ; Mon, 25 Mar 2024 08:07:49 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 1470437BFB4; Mon, 25 Mar 2024 03:01:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="SWUdZKRs" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8557B145FFE; Sun, 24 Mar 2024 23:14:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711322060; cv=none; b=jo3el2W5hOvfYAFfEhjVpjo0SFoX5em9cUO3P5vd2x7lbtvssH5OpbezM134SuwIGhvkNabGCpttvgX1K8IdGzfi2xV9sVKxKuWAFlontXO3DnHIs4wmcJM25neNmWBxGmoLL9UiV+m338jJdd+MBR0s+NYdxoh46DuyyQIHs+A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711322060; c=relaxed/simple; bh=UpVdNmjTBMvFdIHiv9Cau+i5iASzj/8tzCZjDkliNf0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BDtckgjEOK8mF8XO4tDVQ9A7HYjVXXKoUw68yBRCxGPog1mvdiTkDted2k/hDPjq/ihgt8sO0VZar6INyjFYVsgXGV3li3WaY9PjjUsfep/3VUAOH5EidpnhHZvpgWVt5wG+mDZFWplvQf0SXSJtQsDrA1C/ICD0k4agyyQ4OxA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SWUdZKRs; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id AE995C433F1; Sun, 24 Mar 2024 23:14:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711322060; bh=UpVdNmjTBMvFdIHiv9Cau+i5iASzj/8tzCZjDkliNf0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SWUdZKRsm3WxLNO0wdIURMd/i6Lbp1WatcsAY+LcjvdcErN+Fs0mzt/O1KH6onXNs IU+1SGhjkr9eRyhGiJptgYgShahOWYhmZ+LLUShwZTBp1qbBJVwm7ggGxAWwCSws6R WFmxGnHKKMwk6SVoHYhYrMDgRtzOwtKNZfr4c5Q4s73KOP4IEH8sC4V2uOlgfcH3Ob P9xmzm1eccE+bFCUMw7dNKybx3nx+uihPKyhm7Iye+X4ac/CU93fTSYL5O+YcRTxV2 ADUQVrplvj4at3/5JlBvtp+ncsWl85pIZfHiZrMO1MsJBmQUDvyxa6sxeDyu8JBLsW C7npTeRm0d0qA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Viktor Malik , Andrii Nakryiko , Daniel Xu , Sasha Levin Subject: [PATCH 6.1 133/451] tools/resolve_btfids: Refactor set sorting with types from btf_ids.h Date: Sun, 24 Mar 2024 19:06:49 -0400 Message-ID: <20240324231207.1351418-134-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240324231207.1351418-1-sashal@kernel.org> References: <20240324231207.1351418-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit From: Viktor Malik [ Upstream commit 9707ac4fe2f5bac6406d2403f8b8a64d7b3d8e43 ] Instead of using magic offsets to access BTF ID set data, leverage types from btf_ids.h (btf_id_set and btf_id_set8) which define the actual layout of the data. Thanks to this change, set sorting should also continue working if the layout changes. This requires to sync the definition of 'struct btf_id_set8' from include/linux/btf_ids.h to tools/include/linux/btf_ids.h. We don't sync the rest of the file at the moment, b/c that would require to also sync multiple dependent headers and we don't need any other defs from btf_ids.h. Signed-off-by: Viktor Malik Signed-off-by: Andrii Nakryiko Acked-by: Daniel Xu Link: https://lore.kernel.org/bpf/ff7f062ddf6a00815fda3087957c4ce667f50532.1707223196.git.vmalik@redhat.com Stable-dep-of: 903fad439466 ("tools/resolve_btfids: Fix cross-compilation to non-host endianness") Signed-off-by: Sasha Levin --- tools/bpf/resolve_btfids/main.c | 35 ++++++++++++++++++++------------- tools/include/linux/btf_ids.h | 9 +++++++++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c index 77058174082d7..cd42977c6a1f4 100644 --- a/tools/bpf/resolve_btfids/main.c +++ b/tools/bpf/resolve_btfids/main.c @@ -70,6 +70,7 @@ #include #include #include +#include #include #include #include @@ -78,7 +79,7 @@ #include #define BTF_IDS_SECTION ".BTF_ids" -#define BTF_ID "__BTF_ID__" +#define BTF_ID_PREFIX "__BTF_ID__" #define BTF_STRUCT "struct" #define BTF_UNION "union" @@ -161,7 +162,7 @@ static int eprintf(int level, int var, const char *fmt, ...) static bool is_btf_id(const char *name) { - return name && !strncmp(name, BTF_ID, sizeof(BTF_ID) - 1); + return name && !strncmp(name, BTF_ID_PREFIX, sizeof(BTF_ID_PREFIX) - 1); } static struct btf_id *btf_id__find(struct rb_root *root, const char *name) @@ -441,7 +442,7 @@ static int symbols_collect(struct object *obj) * __BTF_ID__TYPE__vfs_truncate__0 * prefix = ^ */ - prefix = name + sizeof(BTF_ID) - 1; + prefix = name + sizeof(BTF_ID_PREFIX) - 1; /* struct */ if (!strncmp(prefix, BTF_STRUCT, sizeof(BTF_STRUCT) - 1)) { @@ -649,19 +650,18 @@ static int cmp_id(const void *pa, const void *pb) static int sets_patch(struct object *obj) { Elf_Data *data = obj->efile.idlist; - int *ptr = data->d_buf; struct rb_node *next; next = rb_first(&obj->sets); while (next) { - unsigned long addr, idx; + struct btf_id_set8 *set8; + struct btf_id_set *set; + unsigned long addr, off; struct btf_id *id; - int *base; - int cnt; id = rb_entry(next, struct btf_id, rb_node); addr = id->addr[0]; - idx = addr - obj->efile.idlist_addr; + off = addr - obj->efile.idlist_addr; /* sets are unique */ if (id->addr_cnt != 1) { @@ -670,14 +670,21 @@ static int sets_patch(struct object *obj) return -1; } - idx = idx / sizeof(int); - base = &ptr[idx] + (id->is_set8 ? 2 : 1); - cnt = ptr[idx]; + if (id->is_set) { + set = data->d_buf + off; + qsort(set->ids, set->cnt, sizeof(set->ids[0]), cmp_id); + } else { + set8 = data->d_buf + off; + /* + * Make sure id is at the beginning of the pairs + * struct, otherwise the below qsort would not work. + */ + BUILD_BUG_ON(set8->pairs != &set8->pairs[0].id); + qsort(set8->pairs, set8->cnt, sizeof(set8->pairs[0]), cmp_id); + } pr_debug("sorting addr %5lu: cnt %6d [%s]\n", - (idx + 1) * sizeof(int), cnt, id->name); - - qsort(base, cnt, id->is_set8 ? sizeof(uint64_t) : sizeof(int), cmp_id); + off, id->is_set ? set->cnt : set8->cnt, id->name); next = rb_next(next); } diff --git a/tools/include/linux/btf_ids.h b/tools/include/linux/btf_ids.h index 2f882d5cb30f5..72535f00572f6 100644 --- a/tools/include/linux/btf_ids.h +++ b/tools/include/linux/btf_ids.h @@ -8,6 +8,15 @@ struct btf_id_set { u32 ids[]; }; +struct btf_id_set8 { + u32 cnt; + u32 flags; + struct { + u32 id; + u32 flags; + } pairs[]; +}; + #ifdef CONFIG_DEBUG_INFO_BTF #include /* for __PASTE */ -- 2.43.0