commit: 34084c0f265ddd0443e44237399584bf500ee9e4 Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> AuthorDate: Sat Aug 10 15:42:43 2024 +0000 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> CommitDate: Sat Aug 10 15:42:43 2024 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=34084c0f
libbpf: workaround -Wmaybe-uninitialized false positive Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> 0000_README | 4 ++ ...workaround-Wmaybe-uninitialized-false-pos.patch | 67 ++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/0000_README b/0000_README index f2b8c71e..a6c696ed 100644 --- a/0000_README +++ b/0000_README @@ -275,6 +275,10 @@ Patch: 2950_jump-label-fix.patch From: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/ Desc: jump_label: Fix a regression +Patch: 2990_libbpf-workaround-Wmaybe-uninitialized-false-pos.patch +From: https://lore.kernel.org/bpf/3ebbe7a4e93a5ddc3a26e2e11d329801d7c8de6b.1723217044.git....@gentoo.org/ +Desc: libbpf: workaround -Wmaybe-uninitialized false positive + Patch: 3000_Support-printing-firmware-info.patch From: https://bugs.gentoo.org/732852 Desc: Print firmware info (Reqs CONFIG_GENTOO_PRINT_FIRMWARE_INFO). Thanks to Georgy Yakovlev diff --git a/2990_libbpf-workaround-Wmaybe-uninitialized-false-pos.patch b/2990_libbpf-workaround-Wmaybe-uninitialized-false-pos.patch new file mode 100644 index 00000000..86de18d7 --- /dev/null +++ b/2990_libbpf-workaround-Wmaybe-uninitialized-false-pos.patch @@ -0,0 +1,67 @@ +From git@z Thu Jan 1 00:00:00 1970 +Subject: [PATCH] libbpf: workaround -Wmaybe-uninitialized false positive +From: Sam James <[email protected]> +Date: Fri, 09 Aug 2024 16:24:04 +0100 +Message-Id: <3ebbe7a4e93a5ddc3a26e2e11d329801d7c8de6b.1723217044.git....@gentoo.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 8bit + +In `elf_close`, we get this with GCC 15 -O3 (at least): +``` +In function ‘elf_close’, + inlined from ‘elf_close’ at elf.c:53:6, + inlined from ‘elf_find_func_offset_from_file’ at elf.c:384:2: +elf.c:57:9: warning: ‘elf_fd.elf’ may be used uninitialized [-Wmaybe-uninitialized] + 57 | elf_end(elf_fd->elf); + | ^~~~~~~~~~~~~~~~~~~~ +elf.c: In function ‘elf_find_func_offset_from_file’: +elf.c:377:23: note: ‘elf_fd.elf’ was declared here + 377 | struct elf_fd elf_fd; + | ^~~~~~ +In function ‘elf_close’, + inlined from ‘elf_close’ at elf.c:53:6, + inlined from ‘elf_find_func_offset_from_file’ at elf.c:384:2: +elf.c:58:9: warning: ‘elf_fd.fd’ may be used uninitialized [-Wmaybe-uninitialized] + 58 | close(elf_fd->fd); + | ^~~~~~~~~~~~~~~~~ +elf.c: In function ‘elf_find_func_offset_from_file’: +elf.c:377:23: note: ‘elf_fd.fd’ was declared here + 377 | struct elf_fd elf_fd; + | ^~~~~~ +``` + +In reality, our use is fine, it's just that GCC doesn't model errno +here (see linked GCC bug). Suppress -Wmaybe-uninitialized accordingly. + +Link: https://gcc.gnu.org/PR114952 +Signed-off-by: Sam James <[email protected]> +--- + tools/lib/bpf/elf.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tools/lib/bpf/elf.c b/tools/lib/bpf/elf.c +index c92e02394159e..ee226bb8e1af0 100644 +--- a/tools/lib/bpf/elf.c ++++ b/tools/lib/bpf/elf.c +@@ -369,6 +369,9 @@ long elf_find_func_offset(Elf *elf, const char *binary_path, const char *name) + return ret; + } + ++#pragma GCC diagnostic push ++/* https://gcc.gnu.org/PR114952 */ ++#pragma GCC diagnostic ignored "-Wmaybe-uninitialized" + /* Find offset of function name in ELF object specified by path. "name" matches + * symbol name or name@@LIB for library functions. + */ +@@ -384,6 +387,7 @@ long elf_find_func_offset_from_file(const char *binary_path, const char *name) + elf_close(&elf_fd); + return ret; + } ++#pragma GCC diagnostic pop + + struct symbol { + const char *name; +-- +2.45.2 +
