commit: b5fcd93358b4df7106b33c7f8e3a80c554d0c2ec Author: Jakov Smolic <jakov.smolic <AT> sartura <DOT> hr> AuthorDate: Thu Jul 23 18:31:36 2020 +0000 Commit: Patrick McLean <chutzpah <AT> gentoo <DOT> org> CommitDate: Fri Jul 24 18:39:47 2020 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b5fcd933
dev-libs/libbpf: add hashmap patch - Add a patch to fix hashmap on (I)LP32 architectures - Upstream commit: https://github.com/libbpf/libbpf/commit/cd016d93f7bf280fe6f2dfc723257786dd3ffd00 Package-Manager: Portage-2.3.99, Repoman-2.3.23 Signed-off-by: Jakov Smolic <jakov.smolic <AT> sartura.hr> Signed-off-by: Jakov Petrina <jakov.petrina <AT> sartura.hr> Signed-off-by: Luka Perkov <luka.perkov <AT> sartura.hr> Closes: https://github.com/gentoo/gentoo/pull/16791 Signed-off-by: Patrick McLean <chutzpah <AT> gentoo.org> .../files/libbpf-0.0.9-fix-hashmap-on-lp32.patch | 49 ++++++++++++++++++++++ ...{libbpf-0.0.9.ebuild => libbpf-0.0.9-r1.ebuild} | 1 + 2 files changed, 50 insertions(+) diff --git a/dev-libs/libbpf/files/libbpf-0.0.9-fix-hashmap-on-lp32.patch b/dev-libs/libbpf/files/libbpf-0.0.9-fix-hashmap-on-lp32.patch new file mode 100644 index 00000000000..98baf1cd605 --- /dev/null +++ b/dev-libs/libbpf/files/libbpf-0.0.9-fix-hashmap-on-lp32.patch @@ -0,0 +1,49 @@ +From cd016d93f7bf280fe6f2dfc723257786dd3ffd00 Mon Sep 17 00:00:00 2001 +From: Jakub Bogusz <[email protected]> +Date: Thu, 9 Jul 2020 15:57:23 -0700 +Subject: [PATCH] libbpf: Fix libbpf hashmap on (I)LP32 architectures + +On ILP32, 64-bit result was shifted by value calculated for 32-bit long type +and returned value was much outside hashmap capacity. +As advised by Andrii Nakryiko, this patch uses different hashing variant for +architectures with size_t shorter than long long. + +Fixes: e3b924224028 ("libbpf: add resizable non-thread safe internal hashmap") +Signed-off-by: Jakub Bogusz <[email protected]> +Signed-off-by: Andrii Nakryiko <[email protected]> +Signed-off-by: Alexei Starovoitov <[email protected]> +Link: https://lore.kernel.org/bpf/[email protected] +--- + hashmap.h | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) + +diff --git a/hashmap.h b/hashmap.h +index df59fd4..e0af36b 100644 +--- a/hashmap.h ++++ b/hashmap.h +@@ -11,14 +11,18 @@ + #include <stdbool.h> + #include <stddef.h> + #include <limits.h> +-#ifndef __WORDSIZE +-#define __WORDSIZE (__SIZEOF_LONG__ * 8) +-#endif + + static inline size_t hash_bits(size_t h, int bits) + { + /* shuffle bits and return requested number of upper bits */ +- return (h * 11400714819323198485llu) >> (__WORDSIZE - bits); ++#if (__SIZEOF_SIZE_T__ == __SIZEOF_LONG_LONG__) ++ /* LP64 case */ ++ return (h * 11400714819323198485llu) >> (__SIZEOF_LONG_LONG__ * 8 - bits); ++#elif (__SIZEOF_SIZE_T__ <= __SIZEOF_LONG__) ++ return (h * 2654435769lu) >> (__SIZEOF_LONG__ * 8 - bits); ++#else ++# error "Unsupported size_t size" ++#endif + } + + typedef size_t (*hashmap_hash_fn)(const void *key, void *ctx); +-- +2.26.2 + diff --git a/dev-libs/libbpf/libbpf-0.0.9.ebuild b/dev-libs/libbpf/libbpf-0.0.9-r1.ebuild similarity index 94% rename from dev-libs/libbpf/libbpf-0.0.9.ebuild rename to dev-libs/libbpf/libbpf-0.0.9-r1.ebuild index 43363c91efa..b01f2de058d 100644 --- a/dev-libs/libbpf/libbpf-0.0.9.ebuild +++ b/dev-libs/libbpf/libbpf-0.0.9-r1.ebuild @@ -24,6 +24,7 @@ S="${WORKDIR}/${P}/src" PATCHES=( "${FILESDIR}/libbpf-0.0.7-paths.patch" + "${FILESDIR}/libbpf-0.0.9-fix-hashmap-on-lp32.patch" ) src_compile() {
