* [PATCH v2] libbpf: workaround -Wmaybe-uninitialized false positive
@ 2024-08-09 17:26 Sam James
2024-08-09 17:48 ` Alan Maguire
0 siblings, 1 reply; 3+ messages in thread
From: Sam James @ 2024-08-09 17:26 UTC (permalink / raw)
To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt
Cc: Jose E . Marchesi, Andrew Pinski, Kacper Słomiński,
Arsen Arsenović, Sam James, bpf, linux-kernel, llvm
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@gentoo.org>
---
v2: Fix Clang build.
Range-diff against v1:
1: 3ebbe7a4e93a ! 1: 8f5c3b173e4c libbpf: workaround -Wmaybe-uninitialized false positive
@@ tools/lib/bpf/elf.c: long elf_find_func_offset(Elf *elf, const char *binary_path
return ret;
}
++#if !defined(__clang__)
+#pragma GCC diagnostic push
+/* https://gcc.gnu.org/PR114952 */
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
++#endif
/* Find offset of function name in ELF object specified by path. "name" matches
* symbol name or name@@LIB for library functions.
*/
@@ tools/lib/bpf/elf.c: long elf_find_func_offset_from_file(const char *binary_path
elf_close(&elf_fd);
return ret;
}
++#if !defined(__clang__)
+#pragma GCC diagnostic pop
++#endif
struct symbol {
const char *name;
tools/lib/bpf/elf.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/lib/bpf/elf.c b/tools/lib/bpf/elf.c
index c92e02394159..7058425ca85b 100644
--- a/tools/lib/bpf/elf.c
+++ b/tools/lib/bpf/elf.c
@@ -369,6 +369,11 @@ long elf_find_func_offset(Elf *elf, const char *binary_path, const char *name)
return ret;
}
+#if !defined(__clang__)
+#pragma GCC diagnostic push
+/* https://gcc.gnu.org/PR114952 */
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
/* Find offset of function name in ELF object specified by path. "name" matches
* symbol name or name@@LIB for library functions.
*/
@@ -384,6 +389,9 @@ long elf_find_func_offset_from_file(const char *binary_path, const char *name)
elf_close(&elf_fd);
return ret;
}
+#if !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
struct symbol {
const char *name;
--
2.45.2
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v2] libbpf: workaround -Wmaybe-uninitialized false positive
2024-08-09 17:26 [PATCH v2] libbpf: workaround -Wmaybe-uninitialized false positive Sam James
@ 2024-08-09 17:48 ` Alan Maguire
2024-08-12 10:40 ` Sam James
0 siblings, 1 reply; 3+ messages in thread
From: Alan Maguire @ 2024-08-09 17:48 UTC (permalink / raw)
To: Sam James, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt
Cc: Jose E . Marchesi, Andrew Pinski, Kacper Słomiński,
Arsen Arsenović, bpf, linux-kernel, llvm
On 09/08/2024 18:26, Sam James wrote:
> 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@gentoo.org>
> ---
> v2: Fix Clang build.
>
> Range-diff against v1:
> 1: 3ebbe7a4e93a ! 1: 8f5c3b173e4c libbpf: workaround -Wmaybe-uninitialized false positive
> @@ tools/lib/bpf/elf.c: long elf_find_func_offset(Elf *elf, const char *binary_path
> return ret;
> }
>
> ++#if !defined(__clang__)
> +#pragma GCC diagnostic push
> +/* https://gcc.gnu.org/PR114952 */
> +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
> ++#endif
> /* Find offset of function name in ELF object specified by path. "name" matches
> * symbol name or name@@LIB for library functions.
> */
> @@ tools/lib/bpf/elf.c: long elf_find_func_offset_from_file(const char *binary_path
> elf_close(&elf_fd);
> return ret;
> }
> ++#if !defined(__clang__)
> +#pragma GCC diagnostic pop
> ++#endif
>
> struct symbol {
> const char *name;
>
> tools/lib/bpf/elf.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/tools/lib/bpf/elf.c b/tools/lib/bpf/elf.c
> index c92e02394159..7058425ca85b 100644
> --- a/tools/lib/bpf/elf.c
> +++ b/tools/lib/bpf/elf.c
> @@ -369,6 +369,11 @@ long elf_find_func_offset(Elf *elf, const char *binary_path, const char *name)
> return ret;
> }
>
> +#if !defined(__clang__)
> +#pragma GCC diagnostic push
> +/* https://gcc.gnu.org/PR114952 */
> +#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
> +#endif
> /* Find offset of function name in ELF object specified by path. "name" matches
> * symbol name or name@@LIB for library functions.
> */
> @@ -384,6 +389,9 @@ long elf_find_func_offset_from_file(const char *binary_path, const char *name)
> elf_close(&elf_fd);
> return ret;
> }
> +#if !defined(__clang__)
> +#pragma GCC diagnostic pop
> +#endif
>
> struct symbol {
> const char *name;
Would just initializing struct elf_fd be enough to silence the error
perhaps, i.e.
diff --git a/tools/lib/bpf/elf.c b/tools/lib/bpf/elf.c
index c92e02394159..3060597a527e 100644
--- a/tools/lib/bpf/elf.c
+++ b/tools/lib/bpf/elf.c
@@ -374,7 +374,7 @@ long elf_find_func_offset(Elf *elf, const char
*binary_path, const char *name)
*/
long elf_find_func_offset_from_file(const char *binary_path, const char
*name)
{
- struct elf_fd elf_fd;
+ struct elf_fd elf_fd = { .fd = -1 };
long ret = -ENOENT;
ret = elf_open(binary_path, &elf_fd);
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v2] libbpf: workaround -Wmaybe-uninitialized false positive
2024-08-09 17:48 ` Alan Maguire
@ 2024-08-12 10:40 ` Sam James
0 siblings, 0 replies; 3+ messages in thread
From: Sam James @ 2024-08-12 10:40 UTC (permalink / raw)
To: Alan Maguire
Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Jose E . Marchesi, Andrew Pinski, Kacper Słomiński,
Arsen Arsenović, bpf, linux-kernel, llvm
Alan Maguire <alan.maguire@oracle.com> writes:
> On 09/08/2024 18:26, Sam James wrote:
>> In `elf_close`, we get this with GCC 15 -O3 (at least):
> [...]
>
> Would just initializing struct elf_fd be enough to silence the error
> perhaps, i.e.
Yeah, that WFM. Thanks, sent v3.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-08-12 10:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-09 17:26 [PATCH v2] libbpf: workaround -Wmaybe-uninitialized false positive Sam James
2024-08-09 17:48 ` Alan Maguire
2024-08-12 10:40 ` Sam James
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox