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 <sam@xxxxxxxxxx> --- 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