bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section
@ 2022-12-17 22:35 Changbin Du
  2022-12-17 22:35 ` [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section Changbin Du
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Changbin Du @ 2022-12-17 22:35 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan
  Cc: Martin KaFai Lau, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, bpf,
	linux-kernel, Mark Rutland, Alexander Shishkin, Namhyung Kim,
	Mykola Lysenko, linux-perf-users, linux-kselftest, Changbin Du

Display error message for missing ".BTF" section and clean up empty
vmlinux.h file.

v3:
 - fix typo and make error message consistent. (Andrii Nakryiko)
 - split out perf change.
v2:
 - remove vmlinux specific error info.
 - use builtin target .DELETE_ON_ERROR: to delete empty vmlinux.h


Changbin Du (2):
  libbpf: show error info about missing ".BTF" section
  bpf: makefiles: do not generate empty vmlinux.h

 tools/bpf/bpftool/Makefile           | 3 +++
 tools/lib/bpf/btf.c                  | 1 +
 tools/testing/selftests/bpf/Makefile | 3 +++
 3 files changed, 7 insertions(+)

-- 
2.37.2


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-17 22:35 [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section Changbin Du
@ 2022-12-17 22:35 ` Changbin Du
  2022-12-19  3:45   ` Leo Yan
  2022-12-17 22:35 ` [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h Changbin Du
  2022-12-21  0:20 ` [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section patchwork-bot+netdevbpf
  2 siblings, 1 reply; 18+ messages in thread
From: Changbin Du @ 2022-12-17 22:35 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan
  Cc: Martin KaFai Lau, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, bpf,
	linux-kernel, Mark Rutland, Alexander Shishkin, Namhyung Kim,
	Mykola Lysenko, linux-perf-users, linux-kselftest, Changbin Du

Show the real problem instead of just saying "No such file or directory".

Now will print below info:
libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory

Signed-off-by: Changbin Du <changbin.du@gmail.com>
---
 tools/lib/bpf/btf.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
index 71e165b09ed5..dd2badf1a54e 100644
--- a/tools/lib/bpf/btf.c
+++ b/tools/lib/bpf/btf.c
@@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
 	err = 0;
 
 	if (!btf_data) {
+		pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
 		err = -ENOENT;
 		goto done;
 	}
-- 
2.37.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h
  2022-12-17 22:35 [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section Changbin Du
  2022-12-17 22:35 ` [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section Changbin Du
@ 2022-12-17 22:35 ` Changbin Du
  2022-12-19  3:59   ` Leo Yan
  2022-12-20 15:38   ` Quentin Monnet
  2022-12-21  0:20 ` [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section patchwork-bot+netdevbpf
  2 siblings, 2 replies; 18+ messages in thread
From: Changbin Du @ 2022-12-17 22:35 UTC (permalink / raw)
  To: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan
  Cc: Martin KaFai Lau, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, bpf,
	linux-kernel, Mark Rutland, Alexander Shishkin, Namhyung Kim,
	Mykola Lysenko, linux-perf-users, linux-kselftest, Changbin Du

Remove the empty vmlinux.h if bpftool failed to dump btf info.
The empty vmlinux.h can hide real error when reading output
of make.

This is done by adding .DELETE_ON_ERROR special target in related
makefiles.

Signed-off-by: Changbin Du <changbin.du@gmail.com>
---
 tools/bpf/bpftool/Makefile           | 3 +++
 tools/testing/selftests/bpf/Makefile | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
index 787b857d3fb5..313fd1b09189 100644
--- a/tools/bpf/bpftool/Makefile
+++ b/tools/bpf/bpftool/Makefile
@@ -289,3 +289,6 @@ FORCE:
 .PHONY: all FORCE bootstrap clean install-bin install uninstall
 .PHONY: doc doc-clean doc-install doc-uninstall
 .DEFAULT_GOAL := all
+
+# Delete partially updated (corrupted) files on error
+.DELETE_ON_ERROR:
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index c22c43bbee19..205e8c3c346a 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -626,3 +626,6 @@ EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)	\
 			       liburandom_read.so)
 
 .PHONY: docs docs-clean
+
+# Delete partially updated (corrupted) files on error
+.DELETE_ON_ERROR:
-- 
2.37.2


^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-17 22:35 ` [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section Changbin Du
@ 2022-12-19  3:45   ` Leo Yan
  2022-12-20  1:31     ` Changbin Du
  0 siblings, 1 reply; 18+ messages in thread
From: Leo Yan @ 2022-12-19  3:45 UTC (permalink / raw)
  To: Changbin Du
  Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

Hi Changbin,

On Sun, Dec 18, 2022 at 06:35:08AM +0800, Changbin Du wrote:
> Show the real problem instead of just saying "No such file or directory".
> 
> Now will print below info:
> libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux

Recently I encountered the same issue, it could be caused by:
either missing to install tool pahole or missing to enable kernel
configuration CONFIG_DEBUG_INFO_BTF.

Could we give explict info for reasoning failure?  Like:

"libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".

> Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory

This log is confusing when we can find vmlinux file but without BTF
section.  Consider to use a separate patch to detect vmlinux not
found case and print out "No such file or directory"?

Thanks,
Leo

> Signed-off-by: Changbin Du <changbin.du@gmail.com>
> ---
>  tools/lib/bpf/btf.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> index 71e165b09ed5..dd2badf1a54e 100644
> --- a/tools/lib/bpf/btf.c
> +++ b/tools/lib/bpf/btf.c
> @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
>  	err = 0;
>  
>  	if (!btf_data) {
> +		pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
>  		err = -ENOENT;
>  		goto done;
>  	}
> -- 
> 2.37.2
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h
  2022-12-17 22:35 ` [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h Changbin Du
@ 2022-12-19  3:59   ` Leo Yan
  2022-12-20  1:26     ` Changbin Du
  2022-12-20 15:38   ` Quentin Monnet
  1 sibling, 1 reply; 18+ messages in thread
From: Leo Yan @ 2022-12-19  3:59 UTC (permalink / raw)
  To: Changbin Du
  Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Sun, Dec 18, 2022 at 06:35:09AM +0800, Changbin Du wrote:
> Remove the empty vmlinux.h if bpftool failed to dump btf info.
> The empty vmlinux.h can hide real error when reading output
> of make.
> 
> This is done by adding .DELETE_ON_ERROR special target in related
> makefiles.

We need to handle the same case for perf building, its makefile
linux/tools/perf/Makefile.perf also uses bpftool to generate
vmlinux.h, see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/Makefile.perf#n1067

Please consider to use a separate patch to add the same change in
Makefile.perf?

Thanks,
Leo

> Signed-off-by: Changbin Du <changbin.du@gmail.com>
> ---
>  tools/bpf/bpftool/Makefile           | 3 +++
>  tools/testing/selftests/bpf/Makefile | 3 +++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index 787b857d3fb5..313fd1b09189 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -289,3 +289,6 @@ FORCE:
>  .PHONY: all FORCE bootstrap clean install-bin install uninstall
>  .PHONY: doc doc-clean doc-install doc-uninstall
>  .DEFAULT_GOAL := all
> +
> +# Delete partially updated (corrupted) files on error
> +.DELETE_ON_ERROR:
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index c22c43bbee19..205e8c3c346a 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -626,3 +626,6 @@ EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)	\
>  			       liburandom_read.so)
>  
>  .PHONY: docs docs-clean
> +
> +# Delete partially updated (corrupted) files on error
> +.DELETE_ON_ERROR:
> -- 
> 2.37.2
> 

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h
  2022-12-19  3:59   ` Leo Yan
@ 2022-12-20  1:26     ` Changbin Du
  0 siblings, 0 replies; 18+ messages in thread
From: Changbin Du @ 2022-12-20  1:26 UTC (permalink / raw)
  To: Leo Yan
  Cc: Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Mon, Dec 19, 2022 at 11:59:38AM +0800, Leo Yan wrote:
> On Sun, Dec 18, 2022 at 06:35:09AM +0800, Changbin Du wrote:
> > Remove the empty vmlinux.h if bpftool failed to dump btf info.
> > The empty vmlinux.h can hide real error when reading output
> > of make.
> > 
> > This is done by adding .DELETE_ON_ERROR special target in related
> > makefiles.
> 
> We need to handle the same case for perf building, its makefile
> linux/tools/perf/Makefile.perf also uses bpftool to generate
> vmlinux.h, see:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/Makefile.perf#n1067
> 
> Please consider to use a separate patch to add the same change in
> Makefile.perf?
>
It's alreay there.
https://lore.kernel.org/lkml/20221217225151.90387-1-changbin.du@gmail.com/T/

> Thanks,
> Leo
> 
> > Signed-off-by: Changbin Du <changbin.du@gmail.com>
> > ---
> >  tools/bpf/bpftool/Makefile           | 3 +++
> >  tools/testing/selftests/bpf/Makefile | 3 +++
> >  2 files changed, 6 insertions(+)
> > 
> > diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> > index 787b857d3fb5..313fd1b09189 100644
> > --- a/tools/bpf/bpftool/Makefile
> > +++ b/tools/bpf/bpftool/Makefile
> > @@ -289,3 +289,6 @@ FORCE:
> >  .PHONY: all FORCE bootstrap clean install-bin install uninstall
> >  .PHONY: doc doc-clean doc-install doc-uninstall
> >  .DEFAULT_GOAL := all
> > +
> > +# Delete partially updated (corrupted) files on error
> > +.DELETE_ON_ERROR:
> > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> > index c22c43bbee19..205e8c3c346a 100644
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -626,3 +626,6 @@ EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR)	\
> >  			       liburandom_read.so)
> >  
> >  .PHONY: docs docs-clean
> > +
> > +# Delete partially updated (corrupted) files on error
> > +.DELETE_ON_ERROR:
> > -- 
> > 2.37.2
> > 

-- 
Cheers,
Changbin Du

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-19  3:45   ` Leo Yan
@ 2022-12-20  1:31     ` Changbin Du
  2022-12-20 11:34       ` Leo Yan
  0 siblings, 1 reply; 18+ messages in thread
From: Changbin Du @ 2022-12-20  1:31 UTC (permalink / raw)
  To: Leo Yan
  Cc: Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Mon, Dec 19, 2022 at 11:45:08AM +0800, Leo Yan wrote:
> Hi Changbin,
> 
> On Sun, Dec 18, 2022 at 06:35:08AM +0800, Changbin Du wrote:
> > Show the real problem instead of just saying "No such file or directory".
> > 
> > Now will print below info:
> > libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
> 
> Recently I encountered the same issue, it could be caused by:
> either missing to install tool pahole or missing to enable kernel
> configuration CONFIG_DEBUG_INFO_BTF.
> 
> Could we give explict info for reasoning failure?  Like:
> 
> "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
> please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
>
This is vmlinux special information and similar tips are removed from
patch V2. libbpf is common for all ELFs.

> > Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
> 
> This log is confusing when we can find vmlinux file but without BTF
> section.  Consider to use a separate patch to detect vmlinux not
> found case and print out "No such file or directory"?
>
I think it's already there. If the file doesn't exist, open will fail.

> Thanks,
> Leo
> 
> > Signed-off-by: Changbin Du <changbin.du@gmail.com>
> > ---
> >  tools/lib/bpf/btf.c | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> > index 71e165b09ed5..dd2badf1a54e 100644
> > --- a/tools/lib/bpf/btf.c
> > +++ b/tools/lib/bpf/btf.c
> > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> >  	err = 0;
> >  
> >  	if (!btf_data) {
> > +		pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> >  		err = -ENOENT;
> >  		goto done;
> >  	}
> > -- 
> > 2.37.2
> > 

-- 
Cheers,
Changbin Du

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-20  1:31     ` Changbin Du
@ 2022-12-20 11:34       ` Leo Yan
  2022-12-21  0:13         ` Andrii Nakryiko
  0 siblings, 1 reply; 18+ messages in thread
From: Leo Yan @ 2022-12-20 11:34 UTC (permalink / raw)
  To: Changbin Du
  Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Quentin Monnet, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Tue, Dec 20, 2022 at 09:31:14AM +0800, Changbin Du wrote:

[...]

> > > Now will print below info:
> > > libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
> > 
> > Recently I encountered the same issue, it could be caused by:
> > either missing to install tool pahole or missing to enable kernel
> > configuration CONFIG_DEBUG_INFO_BTF.
> > 
> > Could we give explict info for reasoning failure?  Like:
> > 
> > "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
> > please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
> >
> This is vmlinux special information and similar tips are removed from
> patch V2. libbpf is common for all ELFs.

Okay, I see.  Sorry for noise.

> > > Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
> > 
> > This log is confusing when we can find vmlinux file but without BTF
> > section.  Consider to use a separate patch to detect vmlinux not
> > found case and print out "No such file or directory"?
> >
> I think it's already there. If the file doesn't exist, open will fail.

[...]

> > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > >  	err = 0;
> > >  
> > >  	if (!btf_data) {
> > > +		pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > >  		err = -ENOENT;

btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
section, therefore, bpftool dumps error string "No such file or
directory".  It's confused that actually vmlinux is existed.

I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
better choice?) to replace -ENOENT at here, this can avoid bpftool to
outputs "No such file or directory" in this case.

Thanks,
Leo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h
  2022-12-17 22:35 ` [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h Changbin Du
  2022-12-19  3:59   ` Leo Yan
@ 2022-12-20 15:38   ` Quentin Monnet
  1 sibling, 0 replies; 18+ messages in thread
From: Quentin Monnet @ 2022-12-20 15:38 UTC (permalink / raw)
  To: Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan
  Cc: Martin KaFai Lau, Song Liu, Yonghong Song, John Fastabend,
	KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa, bpf,
	linux-kernel, Mark Rutland, Alexander Shishkin, Namhyung Kim,
	Mykola Lysenko, linux-perf-users, linux-kselftest

2022-12-18 06:35 UTC+0800 ~ Changbin Du <changbin.du@gmail.com>
> Remove the empty vmlinux.h if bpftool failed to dump btf info.
> The empty vmlinux.h can hide real error when reading output
> of make.
> 
> This is done by adding .DELETE_ON_ERROR special target in related
> makefiles.
> 
> Signed-off-by: Changbin Du <changbin.du@gmail.com>
> ---
>  tools/bpf/bpftool/Makefile           | 3 +++
>  tools/testing/selftests/bpf/Makefile | 3 +++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index 787b857d3fb5..313fd1b09189 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -289,3 +289,6 @@ FORCE:
>  .PHONY: all FORCE bootstrap clean install-bin install uninstall
>  .PHONY: doc doc-clean doc-install doc-uninstall
>  .DEFAULT_GOAL := all
> +
> +# Delete partially updated (corrupted) files on error
> +.DELETE_ON_ERROR:

Acked-by: Quentin Monnet <quentin@isovalent.com>

Thanks!


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-20 11:34       ` Leo Yan
@ 2022-12-21  0:13         ` Andrii Nakryiko
  2022-12-21  3:55           ` Leo Yan
  2023-01-03 15:03           ` Quentin Monnet
  0 siblings, 2 replies; 18+ messages in thread
From: Andrii Nakryiko @ 2022-12-21  0:13 UTC (permalink / raw)
  To: Leo Yan, Quentin Monnet
  Cc: Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Tue, Dec 20, 2022 at 3:34 AM Leo Yan <leo.yan@linaro.org> wrote:
>
> On Tue, Dec 20, 2022 at 09:31:14AM +0800, Changbin Du wrote:
>
> [...]
>
> > > > Now will print below info:
> > > > libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
> > >
> > > Recently I encountered the same issue, it could be caused by:
> > > either missing to install tool pahole or missing to enable kernel
> > > configuration CONFIG_DEBUG_INFO_BTF.
> > >
> > > Could we give explict info for reasoning failure?  Like:
> > >
> > > "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
> > > please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
> > >
> > This is vmlinux special information and similar tips are removed from
> > patch V2. libbpf is common for all ELFs.
>
> Okay, I see.  Sorry for noise.
>
> > > > Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
> > >
> > > This log is confusing when we can find vmlinux file but without BTF
> > > section.  Consider to use a separate patch to detect vmlinux not
> > > found case and print out "No such file or directory"?
> > >
> > I think it's already there. If the file doesn't exist, open will fail.
>
> [...]
>
> > > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > > >   err = 0;
> > > >
> > > >   if (!btf_data) {
> > > > +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > > >           err = -ENOENT;
>
> btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> section, therefore, bpftool dumps error string "No such file or
> directory".  It's confused that actually vmlinux is existed.
>
> I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> better choice?) to replace -ENOENT at here, this can avoid bpftool to
> outputs "No such file or directory" in this case.

The only really meaningful error code would be -ESRCH, which
strerror() will translate to "No such process", which is also
completely confusing.

In general, I always found these strerror() messages extremely
unhelpful and confusing. I wonder if we should make an effort to
actually emit symbolic names of errors instead (literally, "-ENOENT"
in this case). This is all tooling for engineers, I find -ENOENT or
-ESRCH much more meaningful as an error message, compared to "No such
file" seemingly human-readable interpretation.

Quenting, what do you think about the above proposal for bpftool? We
can have some libbpf helper internally and do it in libbpf error
messages as well and just reuse the logic in bpftool, perhaps?


Anyways, I've applied this patch set to bpf-next. Thanks.


>
> Thanks,
> Leo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section
  2022-12-17 22:35 [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section Changbin Du
  2022-12-17 22:35 ` [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section Changbin Du
  2022-12-17 22:35 ` [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h Changbin Du
@ 2022-12-21  0:20 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 18+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-12-21  0:20 UTC (permalink / raw)
  To: Changbin Du
  Cc: ast, daniel, andrii, quentin, peterz, mingo, acme, shuah,
	martin.lau, song, yhs, john.fastabend, kpsingh, sdf, haoluo,
	jolsa, bpf, linux-kernel, mark.rutland, alexander.shishkin,
	namhyung, mykolal, linux-perf-users, linux-kselftest

Hello:

This series was applied to bpf/bpf-next.git (master)
by Andrii Nakryiko <andrii@kernel.org>:

On Sun, 18 Dec 2022 06:35:07 +0800 you wrote:
> Display error message for missing ".BTF" section and clean up empty
> vmlinux.h file.
> 
> v3:
>  - fix typo and make error message consistent. (Andrii Nakryiko)
>  - split out perf change.
> v2:
>  - remove vmlinux specific error info.
>  - use builtin target .DELETE_ON_ERROR: to delete empty vmlinux.h
> 
> [...]

Here is the summary with links:
  - [v3,1/2] libbpf: show error info about missing ".BTF" section
    https://git.kernel.org/bpf/bpf-next/c/e6b4e1d759d3
  - [v3,2/2] bpf: makefiles: do not generate empty vmlinux.h
    https://git.kernel.org/bpf/bpf-next/c/e7f0d5cdd023

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-21  0:13         ` Andrii Nakryiko
@ 2022-12-21  3:55           ` Leo Yan
  2022-12-22 18:51             ` Andrii Nakryiko
  2022-12-30 12:10             ` Changbin Du
  2023-01-03 15:03           ` Quentin Monnet
  1 sibling, 2 replies; 18+ messages in thread
From: Leo Yan @ 2022-12-21  3:55 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Quentin Monnet, Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Tue, Dec 20, 2022 at 04:13:13PM -0800, Andrii Nakryiko wrote:

[...]

> > > > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > > > >   err = 0;
> > > > >
> > > > >   if (!btf_data) {
> > > > > +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > > > >           err = -ENOENT;
> >
> > btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> > section, therefore, bpftool dumps error string "No such file or
> > directory".  It's confused that actually vmlinux is existed.
> >
> > I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> > better choice?) to replace -ENOENT at here, this can avoid bpftool to
> > outputs "No such file or directory" in this case.
> 
> The only really meaningful error code would be -ESRCH, which
> strerror() will translate to "No such process", which is also
> completely confusing.

Or maybe -ENODATA (No data available) is a better choice?

Thanks,
Leo

> In general, I always found these strerror() messages extremely
> unhelpful and confusing. I wonder if we should make an effort to
> actually emit symbolic names of errors instead (literally, "-ENOENT"
> in this case). This is all tooling for engineers, I find -ENOENT or
> -ESRCH much more meaningful as an error message, compared to "No such
> file" seemingly human-readable interpretation.
> 
> Quenting, what do you think about the above proposal for bpftool? We
> can have some libbpf helper internally and do it in libbpf error
> messages as well and just reuse the logic in bpftool, perhaps?
> 
> Anyways, I've applied this patch set to bpf-next. Thanks.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-21  3:55           ` Leo Yan
@ 2022-12-22 18:51             ` Andrii Nakryiko
  2022-12-30 12:10             ` Changbin Du
  1 sibling, 0 replies; 18+ messages in thread
From: Andrii Nakryiko @ 2022-12-22 18:51 UTC (permalink / raw)
  To: Leo Yan
  Cc: Quentin Monnet, Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Tue, Dec 20, 2022 at 7:55 PM Leo Yan <leo.yan@linaro.org> wrote:
>
> On Tue, Dec 20, 2022 at 04:13:13PM -0800, Andrii Nakryiko wrote:
>
> [...]
>
> > > > > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > > > > >   err = 0;
> > > > > >
> > > > > >   if (!btf_data) {
> > > > > > +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > > > > >           err = -ENOENT;
> > >
> > > btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> > > section, therefore, bpftool dumps error string "No such file or
> > > directory".  It's confused that actually vmlinux is existed.
> > >
> > > I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> > > better choice?) to replace -ENOENT at here, this can avoid bpftool to
> > > outputs "No such file or directory" in this case.
> >
> > The only really meaningful error code would be -ESRCH, which
> > strerror() will translate to "No such process", which is also
> > completely confusing.
>
> Or maybe -ENODATA (No data available) is a better choice?

-ENODATA sounds good to me, yep.

>
> Thanks,
> Leo
>
> > In general, I always found these strerror() messages extremely
> > unhelpful and confusing. I wonder if we should make an effort to
> > actually emit symbolic names of errors instead (literally, "-ENOENT"
> > in this case). This is all tooling for engineers, I find -ENOENT or
> > -ESRCH much more meaningful as an error message, compared to "No such
> > file" seemingly human-readable interpretation.
> >
> > Quenting, what do you think about the above proposal for bpftool? We
> > can have some libbpf helper internally and do it in libbpf error
> > messages as well and just reuse the logic in bpftool, perhaps?
> >
> > Anyways, I've applied this patch set to bpf-next. Thanks.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-21  3:55           ` Leo Yan
  2022-12-22 18:51             ` Andrii Nakryiko
@ 2022-12-30 12:10             ` Changbin Du
  2022-12-30 12:28               ` Leo Yan
  1 sibling, 1 reply; 18+ messages in thread
From: Changbin Du @ 2022-12-30 12:10 UTC (permalink / raw)
  To: Leo Yan
  Cc: Andrii Nakryiko, Quentin Monnet, Changbin Du, Alexei Starovoitov,
	Daniel Borkmann, Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Wed, Dec 21, 2022 at 11:55:24AM +0800, Leo Yan wrote:
> On Tue, Dec 20, 2022 at 04:13:13PM -0800, Andrii Nakryiko wrote:
> 
> [...]
> 
> > > > > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > > > > >   err = 0;
> > > > > >
> > > > > >   if (!btf_data) {
> > > > > > +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > > > > >           err = -ENOENT;
> > >
> > > btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> > > section, therefore, bpftool dumps error string "No such file or
> > > directory".  It's confused that actually vmlinux is existed.
> > >
> > > I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> > > better choice?) to replace -ENOENT at here, this can avoid bpftool to
> > > outputs "No such file or directory" in this case.
> > 
> > The only really meaningful error code would be -ESRCH, which
> > strerror() will translate to "No such process", which is also
> > completely confusing.
> 
> Or maybe -ENODATA (No data available) is a better choice?
> 
> Thanks,
> Leo
>
Yan, will you have a patch for this suggestion?

[snip]

-- 
Cheers,
Changbin Du

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-30 12:10             ` Changbin Du
@ 2022-12-30 12:28               ` Leo Yan
  0 siblings, 0 replies; 18+ messages in thread
From: Leo Yan @ 2022-12-30 12:28 UTC (permalink / raw)
  To: Changbin Du
  Cc: Andrii Nakryiko, Quentin Monnet, Alexei Starovoitov,
	Daniel Borkmann, Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Fri, Dec 30, 2022 at 08:10:20PM +0800, Changbin Du wrote:
> On Wed, Dec 21, 2022 at 11:55:24AM +0800, Leo Yan wrote:
> > On Tue, Dec 20, 2022 at 04:13:13PM -0800, Andrii Nakryiko wrote:
> > 
> > [...]
> > 
> > > > > > > @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> > > > > > >   err = 0;
> > > > > > >
> > > > > > >   if (!btf_data) {
> > > > > > > +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> > > > > > >           err = -ENOENT;
> > > >
> > > > btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> > > > section, therefore, bpftool dumps error string "No such file or
> > > > directory".  It's confused that actually vmlinux is existed.
> > > >
> > > > I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> > > > better choice?) to replace -ENOENT at here, this can avoid bpftool to
> > > > outputs "No such file or directory" in this case.
> > > 
> > > The only really meaningful error code would be -ESRCH, which
> > > strerror() will translate to "No such process", which is also
> > > completely confusing.
> > 
> > Or maybe -ENODATA (No data available) is a better choice?
> > 
> > Thanks,
> > Leo
> >
> Yan, will you have a patch for this suggestion?

You are welcome to send a patch, otherwise, I can cook one.

Thanks,
Leo

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2022-12-21  0:13         ` Andrii Nakryiko
  2022-12-21  3:55           ` Leo Yan
@ 2023-01-03 15:03           ` Quentin Monnet
  2023-01-03 23:46             ` Andrii Nakryiko
  1 sibling, 1 reply; 18+ messages in thread
From: Quentin Monnet @ 2023-01-03 15:03 UTC (permalink / raw)
  To: Andrii Nakryiko, Leo Yan
  Cc: Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

2022-12-20 16:13 UTC-0800 ~ Andrii Nakryiko <andrii.nakryiko@gmail.com>
> On Tue, Dec 20, 2022 at 3:34 AM Leo Yan <leo.yan@linaro.org> wrote:
>>
>> On Tue, Dec 20, 2022 at 09:31:14AM +0800, Changbin Du wrote:
>>
>> [...]
>>
>>>>> Now will print below info:
>>>>> libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
>>>>
>>>> Recently I encountered the same issue, it could be caused by:
>>>> either missing to install tool pahole or missing to enable kernel
>>>> configuration CONFIG_DEBUG_INFO_BTF.
>>>>
>>>> Could we give explict info for reasoning failure?  Like:
>>>>
>>>> "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
>>>> please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
>>>>
>>> This is vmlinux special information and similar tips are removed from
>>> patch V2. libbpf is common for all ELFs.
>>
>> Okay, I see.  Sorry for noise.
>>
>>>>> Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
>>>>
>>>> This log is confusing when we can find vmlinux file but without BTF
>>>> section.  Consider to use a separate patch to detect vmlinux not
>>>> found case and print out "No such file or directory"?
>>>>
>>> I think it's already there. If the file doesn't exist, open will fail.
>>
>> [...]
>>
>>>>> @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
>>>>>   err = 0;
>>>>>
>>>>>   if (!btf_data) {
>>>>> +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
>>>>>           err = -ENOENT;
>>
>> btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
>> section, therefore, bpftool dumps error string "No such file or
>> directory".  It's confused that actually vmlinux is existed.
>>
>> I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
>> better choice?) to replace -ENOENT at here, this can avoid bpftool to
>> outputs "No such file or directory" in this case.
> 
> The only really meaningful error code would be -ESRCH, which
> strerror() will translate to "No such process", which is also
> completely confusing.
> 
> In general, I always found these strerror() messages extremely
> unhelpful and confusing. I wonder if we should make an effort to
> actually emit symbolic names of errors instead (literally, "-ENOENT"
> in this case). This is all tooling for engineers, I find -ENOENT or
> -ESRCH much more meaningful as an error message, compared to "No such
> file" seemingly human-readable interpretation.
> 
> Quenting, what do you think about the above proposal for bpftool? We
> can have some libbpf helper internally and do it in libbpf error
> messages as well and just reuse the logic in bpftool, perhaps?

Apologies for the delay.
What you're proposing is to replace all messages currently looking like
this:

	$ bpftool prog
	Error: can't get next program: Operation not permitted

by:

	$ bpftool prog
	Error: can't get next program: -EPERM

Do I understand correctly?

I think the strerror() messages are helpful in some occasions (they
_are_ more human-friendly to many users), but it's also true that
they're not always precise. With bpftool, "Invalid argument" is a
classic when the program doesn't load, and may lead to confusion with
the args passed to bpftool on the command line. Then there are the other
corner cases like the one discussed in this thread. So, why not.

If we do change, yeah I'd rather have as much of this handling in libbpf
itself, and then adjust bpftool to handle the remaining cases, for
consistency.

Quentin

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2023-01-03 15:03           ` Quentin Monnet
@ 2023-01-03 23:46             ` Andrii Nakryiko
  2023-01-05 14:57               ` Quentin Monnet
  0 siblings, 1 reply; 18+ messages in thread
From: Andrii Nakryiko @ 2023-01-03 23:46 UTC (permalink / raw)
  To: Quentin Monnet
  Cc: Leo Yan, Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

On Tue, Jan 3, 2023 at 7:03 AM Quentin Monnet <quentin@isovalent.com> wrote:
>
> 2022-12-20 16:13 UTC-0800 ~ Andrii Nakryiko <andrii.nakryiko@gmail.com>
> > On Tue, Dec 20, 2022 at 3:34 AM Leo Yan <leo.yan@linaro.org> wrote:
> >>
> >> On Tue, Dec 20, 2022 at 09:31:14AM +0800, Changbin Du wrote:
> >>
> >> [...]
> >>
> >>>>> Now will print below info:
> >>>>> libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
> >>>>
> >>>> Recently I encountered the same issue, it could be caused by:
> >>>> either missing to install tool pahole or missing to enable kernel
> >>>> configuration CONFIG_DEBUG_INFO_BTF.
> >>>>
> >>>> Could we give explict info for reasoning failure?  Like:
> >>>>
> >>>> "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
> >>>> please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
> >>>>
> >>> This is vmlinux special information and similar tips are removed from
> >>> patch V2. libbpf is common for all ELFs.
> >>
> >> Okay, I see.  Sorry for noise.
> >>
> >>>>> Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
> >>>>
> >>>> This log is confusing when we can find vmlinux file but without BTF
> >>>> section.  Consider to use a separate patch to detect vmlinux not
> >>>> found case and print out "No such file or directory"?
> >>>>
> >>> I think it's already there. If the file doesn't exist, open will fail.
> >>
> >> [...]
> >>
> >>>>> @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
> >>>>>   err = 0;
> >>>>>
> >>>>>   if (!btf_data) {
> >>>>> +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
> >>>>>           err = -ENOENT;
> >>
> >> btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
> >> section, therefore, bpftool dumps error string "No such file or
> >> directory".  It's confused that actually vmlinux is existed.
> >>
> >> I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
> >> better choice?) to replace -ENOENT at here, this can avoid bpftool to
> >> outputs "No such file or directory" in this case.
> >
> > The only really meaningful error code would be -ESRCH, which
> > strerror() will translate to "No such process", which is also
> > completely confusing.
> >
> > In general, I always found these strerror() messages extremely
> > unhelpful and confusing. I wonder if we should make an effort to
> > actually emit symbolic names of errors instead (literally, "-ENOENT"
> > in this case). This is all tooling for engineers, I find -ENOENT or
> > -ESRCH much more meaningful as an error message, compared to "No such
> > file" seemingly human-readable interpretation.
> >
> > Quenting, what do you think about the above proposal for bpftool? We
> > can have some libbpf helper internally and do it in libbpf error
> > messages as well and just reuse the logic in bpftool, perhaps?
>
> Apologies for the delay.
> What you're proposing is to replace all messages currently looking like
> this:
>
>         $ bpftool prog
>         Error: can't get next program: Operation not permitted
>
> by:
>
>         $ bpftool prog
>         Error: can't get next program: -EPERM
>
> Do I understand correctly?

yep, that's what I had in mind

>
> I think the strerror() messages are helpful in some occasions (they
> _are_ more human-friendly to many users), but it's also true that
> they're not always precise. With bpftool, "Invalid argument" is a
> classic when the program doesn't load, and may lead to confusion with
> the args passed to bpftool on the command line. Then there are the other
> corner cases like the one discussed in this thread. So, why not.

maybe the right approach would be to have both symbolic error name and
its human-readable representation, so for example above

Error: can't get next program: [-EPERM] Operation not permitted

or something like that? And if error value is unknown, just keep it as
integer: "[-5555]" ?

>
> If we do change, yeah I'd rather have as much of this handling in libbpf
> itself, and then adjust bpftool to handle the remaining cases, for
> consistency.

we can teach libbpf_strerror_r() to do this and if bpftool is going to
use it consistently then it would get the benefit automatically

>
> Quentin

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section
  2023-01-03 23:46             ` Andrii Nakryiko
@ 2023-01-05 14:57               ` Quentin Monnet
  0 siblings, 0 replies; 18+ messages in thread
From: Quentin Monnet @ 2023-01-05 14:57 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Leo Yan, Changbin Du, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Peter Zijlstra, Ingo Molnar,
	Arnaldo Carvalho de Melo, Shuah Khan, Martin KaFai Lau, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, bpf, linux-kernel, Mark Rutland,
	Alexander Shishkin, Namhyung Kim, Mykola Lysenko,
	linux-perf-users, linux-kselftest

2023-01-03 15:46 UTC-0800 ~ Andrii Nakryiko <andrii.nakryiko@gmail.com>
> On Tue, Jan 3, 2023 at 7:03 AM Quentin Monnet <quentin@isovalent.com> wrote:
>>
>> 2022-12-20 16:13 UTC-0800 ~ Andrii Nakryiko <andrii.nakryiko@gmail.com>
>>> On Tue, Dec 20, 2022 at 3:34 AM Leo Yan <leo.yan@linaro.org> wrote:
>>>>
>>>> On Tue, Dec 20, 2022 at 09:31:14AM +0800, Changbin Du wrote:
>>>>
>>>> [...]
>>>>
>>>>>>> Now will print below info:
>>>>>>> libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux
>>>>>>
>>>>>> Recently I encountered the same issue, it could be caused by:
>>>>>> either missing to install tool pahole or missing to enable kernel
>>>>>> configuration CONFIG_DEBUG_INFO_BTF.
>>>>>>
>>>>>> Could we give explict info for reasoning failure?  Like:
>>>>>>
>>>>>> "libbpf: failed to find '.BTF' ELF section in /home/changbin/work/linux/vmlinux,
>>>>>> please install pahole and enable CONFIG_DEBUG_INFO_BTF=y for kernel building".
>>>>>>
>>>>> This is vmlinux special information and similar tips are removed from
>>>>> patch V2. libbpf is common for all ELFs.
>>>>
>>>> Okay, I see.  Sorry for noise.
>>>>
>>>>>>> Error: failed to load BTF from /home/changbin/work/linux/vmlinux: No such file or directory
>>>>>>
>>>>>> This log is confusing when we can find vmlinux file but without BTF
>>>>>> section.  Consider to use a separate patch to detect vmlinux not
>>>>>> found case and print out "No such file or directory"?
>>>>>>
>>>>> I think it's already there. If the file doesn't exist, open will fail.
>>>>
>>>> [...]
>>>>
>>>>>>> @@ -990,6 +990,7 @@ static struct btf *btf_parse_elf(const char *path, struct btf *base_btf,
>>>>>>>   err = 0;
>>>>>>>
>>>>>>>   if (!btf_data) {
>>>>>>> +         pr_warn("failed to find '%s' ELF section in %s\n", BTF_ELF_SEC, path);
>>>>>>>           err = -ENOENT;
>>>>
>>>> btf_parse_elf() returns -ENOENT when ELF file doesn't contain BTF
>>>> section, therefore, bpftool dumps error string "No such file or
>>>> directory".  It's confused that actually vmlinux is existed.
>>>>
>>>> I am wondering if we can use error -LIBBPF_ERRNO__FORMAT (or any
>>>> better choice?) to replace -ENOENT at here, this can avoid bpftool to
>>>> outputs "No such file or directory" in this case.
>>>
>>> The only really meaningful error code would be -ESRCH, which
>>> strerror() will translate to "No such process", which is also
>>> completely confusing.
>>>
>>> In general, I always found these strerror() messages extremely
>>> unhelpful and confusing. I wonder if we should make an effort to
>>> actually emit symbolic names of errors instead (literally, "-ENOENT"
>>> in this case). This is all tooling for engineers, I find -ENOENT or
>>> -ESRCH much more meaningful as an error message, compared to "No such
>>> file" seemingly human-readable interpretation.
>>>
>>> Quenting, what do you think about the above proposal for bpftool? We
>>> can have some libbpf helper internally and do it in libbpf error
>>> messages as well and just reuse the logic in bpftool, perhaps?
>>
>> Apologies for the delay.
>> What you're proposing is to replace all messages currently looking like
>> this:
>>
>>         $ bpftool prog
>>         Error: can't get next program: Operation not permitted
>>
>> by:
>>
>>         $ bpftool prog
>>         Error: can't get next program: -EPERM
>>
>> Do I understand correctly?
> 
> yep, that's what I had in mind
> 
>>
>> I think the strerror() messages are helpful in some occasions (they
>> _are_ more human-friendly to many users), but it's also true that
>> they're not always precise. With bpftool, "Invalid argument" is a
>> classic when the program doesn't load, and may lead to confusion with
>> the args passed to bpftool on the command line. Then there are the other
>> corner cases like the one discussed in this thread. So, why not.
> 
> maybe the right approach would be to have both symbolic error name and
> its human-readable representation, so for example above
> 
> Error: can't get next program: [-EPERM] Operation not permitted
> 
> or something like that? And if error value is unknown, just keep it as
> integer: "[-5555]" ?
That would be great, we'd have both the error name for savvy users and
the (more or less accurate) interpretation for others.

>> If we do change, yeah I'd rather have as much of this handling in libbpf
>> itself, and then adjust bpftool to handle the remaining cases, for
>> consistency.
> 
> we can teach libbpf_strerror_r() to do this and if bpftool is going to
> use it consistently then it would get the benefit automatically
Sounds good to me.

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2023-01-05 14:58 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-17 22:35 [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section Changbin Du
2022-12-17 22:35 ` [PATCH v3 1/2] libbpf: show error info about missing ".BTF" section Changbin Du
2022-12-19  3:45   ` Leo Yan
2022-12-20  1:31     ` Changbin Du
2022-12-20 11:34       ` Leo Yan
2022-12-21  0:13         ` Andrii Nakryiko
2022-12-21  3:55           ` Leo Yan
2022-12-22 18:51             ` Andrii Nakryiko
2022-12-30 12:10             ` Changbin Du
2022-12-30 12:28               ` Leo Yan
2023-01-03 15:03           ` Quentin Monnet
2023-01-03 23:46             ` Andrii Nakryiko
2023-01-05 14:57               ` Quentin Monnet
2022-12-17 22:35 ` [PATCH v3 2/2] bpf: makefiles: do not generate empty vmlinux.h Changbin Du
2022-12-19  3:59   ` Leo Yan
2022-12-20  1:26     ` Changbin Du
2022-12-20 15:38   ` Quentin Monnet
2022-12-21  0:20 ` [PATCH v3 0/2] bpftool: improve error handing for missing .BTF section patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).