public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-util/bpf-linker/, dev-util/bpf-linker/files/
@ 2025-08-14 16:44 Michał Górny
  0 siblings, 0 replies; only message in thread
From: Michał Górny @ 2025-08-14 16:44 UTC (permalink / raw
  To: gentoo-commits

commit:     9607dc64a545cd8777f256f14ce330394e97effc
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 14 16:42:14 2025 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Aug 14 16:44:19 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9607dc64

dev-util/bpf-linker: Backport LLVM 21 upstream fix

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-util/bpf-linker/bpf-linker-0.9.14-r1.ebuild    |  87 +++++++++++++++++
 .../files/bpf-linker-0.9.14-llvm-21.patch          | 107 +++++++++++++++++++++
 2 files changed, 194 insertions(+)

diff --git a/dev-util/bpf-linker/bpf-linker-0.9.14-r1.ebuild b/dev-util/bpf-linker/bpf-linker-0.9.14-r1.ebuild
new file mode 100644
index 000000000000..aec93a4d288e
--- /dev/null
+++ b/dev-util/bpf-linker/bpf-linker-0.9.14-r1.ebuild
@@ -0,0 +1,87 @@
+# Copyright 2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+# Extra crates required at runtime via rustc-build-sysroot crate.
+# Note: versions are locked in /usr/lib/rust/*/lib/rustlib/src/rust/library/Cargo.lock.
+CRATES="
+	compiler_builtins@0.1.146
+	compiler_builtins@0.1.152
+"
+
+# Implied by crates above.
+RUST_MIN_VER=1.86.0
+RUST_MAX_VER=1.88.0
+
+declare -A GIT_CRATES=(
+	[compiletest_rs]='https://github.com/Manishearth/compiletest-rs;cb121796a041255ae0afcd9c2766bee4ebfd54f0;compiletest-rs-%commit%'
+)
+
+# bpf-linker code specifically requires LLVM 21 right now
+LLVM_COMPAT=( 21 )
+RUST_REQ_USE="llvm_targets_BPF(+),rust-src"
+
+inherit cargo llvm-r2
+
+DESCRIPTION="Simple BPF static linker"
+HOMEPAGE="https://github.com/aya-rs/bpf-linker/"
+SRC_URI="
+	https://github.com/aya-rs/bpf-linker/archive/v${PV}.tar.gz
+		-> ${P}.gh.tar.gz
+	https://github.com/gentoo-crate-dist/bpf-linker/releases/download/v${PV}/${P}-crates.tar.xz
+	${CARGO_CRATE_URIS}
+"
+
+LICENSE="|| ( MIT Apache-2.0 )"
+# Dependent crate licenses
+LICENSE+="
+	ISC MIT Unicode-3.0 Unicode-DFS-2016
+	|| ( Apache-2.0 Boost-1.0 )
+"
+SLOT="0"
+IUSE="test"
+RESTRICT="!test? ( test )"
+
+DEPEND="
+	$(llvm_gen_dep '
+		llvm-core/llvm:${LLVM_SLOT}=[llvm_targets_BPF]
+	')
+"
+RDEPEND="
+	${DEPEND}
+	${RUST_DEPEND}
+"
+BDEPEND="
+	test? (
+		dev-util/btfdump
+	)
+"
+
+QA_FLAGS_IGNORED=/usr/bin/bpf-linker
+
+pkg_setup() {
+	rust_pkg_setup
+}
+
+src_prepare() {
+	local PATCHES=(
+		# https://github.com/aya-rs/bpf-linker/pull/289
+		"${FILESDIR}/${P}-llvm-21.patch"
+	)
+
+	default
+
+	# replace upstream crate substitution with our crate substitution, sigh
+	local ct_dep=$(grep ^compiletest_rs "${ECARGO_HOME}"/config.toml || die)
+	sed -i -e "/compiletest_rs/s;^.*$;${ct_dep};" Cargo.toml || die
+}
+
+src_configure() {
+	cargo_src_configure --no-default-features
+
+	# note: this needs to be updated to match llvm crate version
+	export LLVM_SYS_201_PREFIX="$(get_llvm_prefix -d)"
+	# the package requires BPF target that is only available in nightly
+	export RUSTC_BOOTSTRAP=1
+}

diff --git a/dev-util/bpf-linker/files/bpf-linker-0.9.14-llvm-21.patch b/dev-util/bpf-linker/files/bpf-linker-0.9.14-llvm-21.patch
new file mode 100644
index 000000000000..b8ef3f72cc31
--- /dev/null
+++ b/dev-util/bpf-linker/files/bpf-linker-0.9.14-llvm-21.patch
@@ -0,0 +1,107 @@
+From b1e6dcd3c8a75489329707709a14403e247e0fa0 Mon Sep 17 00:00:00 2001
+From: Michal Rostecki <vadorovsky@disroot.org>
+Date: Thu, 14 Aug 2025 13:36:12 +0200
+Subject: [PATCH 2/3] di: Update operand indices
+
+Operand indices in `DIType` and all children types were moved starting
+from LLVM 21[0].
+
+[0] llvm/llvm-project@3b90597c2ceaae86608214f6b62b43e55823102b
+---
+ src/llvm/types/di.rs | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/llvm/types/di.rs b/src/llvm/types/di.rs
+index 76757cb1..c44252f0 100644
+--- a/src/llvm/types/di.rs
++++ b/src/llvm/types/di.rs
+@@ -150,8 +150,8 @@ impl<'ctx> From<DIDerivedType<'ctx>> for DIType<'ctx> {
+ #[repr(u32)]
+ enum DIDerivedTypeOperand {
+     /// [`DIType`] representing a base type of the given derived type.
+-    /// [Reference in LLVM code](https://github.com/llvm/llvm-project/blob/llvmorg-17.0.3/llvm/include/llvm/IR/DebugInfoMetadata.h#L1032).
+-    BaseType = 3,
++    /// [Reference in LLVM code](https://github.com/llvm/llvm-project/blob/llvmorg-21.1.0-rc3/llvm/include/llvm/IR/DebugInfoMetadata.h#L1386).
++    BaseType = 5,
+ }
+ 
+ /// Represents the debug information for a derived type in LLVM IR.
+@@ -212,8 +212,8 @@ impl DIDerivedType<'_> {
+ #[repr(u32)]
+ enum DICompositeTypeOperand {
+     /// Elements of the composite type.
+-    /// [Reference in LLVM code](https://github.com/llvm/llvm-project/blob/llvmorg-17.0.3/llvm/include/llvm/IR/DebugInfoMetadata.h#L1230).
+-    Elements = 4,
++    /// [Reference in LLVM code](https://github.com/llvm/llvm-project/blob/llvmorg-21.1.0-rc3/llvm/include/llvm/IR/DebugInfoMetadata.h#L1813).
++    Elements = 6,
+ }
+ 
+ /// Represents the debug info for a composite type in LLVM IR.
+
+From 9668fb5b6f9497a598de920a218d28d57b3e1917 Mon Sep 17 00:00:00 2001
+From: Michal Rostecki <vadorovsky@disroot.org>
+Date: Thu, 14 Aug 2025 14:20:20 +0200
+Subject: [PATCH 3/3] fix: Do not expect strictly sequential order when not
+ necessary
+
+We've noticed that ordering is different on different environments.
+Let's relax the check with `CHECK-DAG`. What matters is that all
+expected names/instructions are present.
+---
+ tests/assembly/di_generics.rs          | 6 +++---
+ tests/assembly/ignore-inline-never.rs  | 4 ++--
+ tests/btf/assembly/exported-symbols.rs | 8 ++++----
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/tests/assembly/di_generics.rs b/tests/assembly/di_generics.rs
+index 08282d4c..0ec5a749 100644
+--- a/tests/assembly/di_generics.rs
++++ b/tests/assembly/di_generics.rs
+@@ -63,6 +63,6 @@ pub fn my_function<T: Add<Output = T> + Copy>(x: T, y: T) -> T {
+         .add(y)
+ }
+ 
+-// CHECK: name: "Foo_3C_u32_3E_"
+-// CHECK: name: "Bar_3C_di_generics_3A__3A_Foo_3C_u32_3E__3E_"
+-// CHECK: name: "my_function_3C_u32_3E_"
++// CHECK-DAG: name: "Foo_3C_u32_3E_"
++// CHECK-DAG: name: "Bar_3C_di_generics_3A__3A_Foo_3C_u32_3E__3E_"
++// CHECK-DAG: name: "my_function_3C_u32_3E_"
+diff --git a/tests/assembly/ignore-inline-never.rs b/tests/assembly/ignore-inline-never.rs
+index 58a8e583..02bdbc25 100644
+--- a/tests/assembly/ignore-inline-never.rs
++++ b/tests/assembly/ignore-inline-never.rs
+@@ -21,6 +21,6 @@ fn actually_inlined(a: u64) -> u64 {
+ pub extern "C" fn fun(a: u64) -> u64 {
+     // CHECK-LABEL: fun:
+     actually_inlined(a)
+-    // CHECK: r{{[0-9]}} = r{{[0-9]}}
+-    // CHECK-NEXT: r{{[0-9]}} += 42
++    // CHECK-DAG: r{{[0-9]}} = r{{[0-9]}}
++    // CHECK-DAG: r{{[0-9]}} += 42
+ }
+diff --git a/tests/btf/assembly/exported-symbols.rs b/tests/btf/assembly/exported-symbols.rs
+index a5b99bf0..921b2e68 100644
+--- a/tests/btf/assembly/exported-symbols.rs
++++ b/tests/btf/assembly/exported-symbols.rs
+@@ -35,7 +35,7 @@ fn inline_function_2(v: u8) -> u8 {
+ }
+ 
+ // #[no_mangle] functions keep linkage=global
+-// CHECK: <FUNC> 'local_no_mangle' --> global [{{[0-9]+}}
++// CHECK-DAG: <FUNC> 'local_no_mangle' --> global [{{[0-9]+}}
+ 
+ // check that parameter names are preserved
+ // CHECK: <FUNC_PROTO>
+@@ -43,8 +43,8 @@ fn inline_function_2(v: u8) -> u8 {
+ // CHECK-NEXT: _arg2
+ 
+ // public functions get static linkage
+-// CHECK: <FUNC> '{{.*}}local_public{{.*}}' --> static
+-// CHECK: <FUNC> '{{.*}}dep_public_symbol{{.*}}' --> static
++// CHECK-DAG: <FUNC> '{{.*}}local_public{{.*}}' --> static
++// CHECK-DAG: <FUNC> '{{.*}}dep_public_symbol{{.*}}' --> static
+ 
+ // #[no_mangle] is honored for dep functions
+-// CHECK: <FUNC> 'dep_no_mangle' --> global
++// CHECK-DAG: <FUNC> 'dep_no_mangle' --> global


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2025-08-14 16:44 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-14 16:44 [gentoo-commits] repo/gentoo:master commit in: dev-util/bpf-linker/, dev-util/bpf-linker/files/ Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox