libbpf: Fix compile error in libbpf_attach_type_by_name
Subsystems (4)
PATCH 1/1 libbpf: Fix compile error in libbpf_attach_type_by_name
Arnaldo Carvalho de Melo reported build error in libbpf when clang version 3.8.1-24 (tags/RELEASE_381/final) is used:
libbpf.c:2201:36: error: comparison of constant -22 with expression of type 'const enum bpf_attach_type' is always false [-Werror,-Wtautological-constant-out-of-range-compare]
if (section_names[i].attach_type == -EINVAL)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~1 error generated.
Fix the error by keeping "is_attachable" property of a program in a separate struct field instead of trying to use attach_type itself.
--- tools/lib/bpf/libbpf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
tools/lib/bpf/libbpf.c +7 -6
@@ -2084,19 +2084,19 @@ void bpf_program__set_expected_attach_type(struct bpf_program *prog, prog->expected_attach_type = type; } -#define BPF_PROG_SEC_IMPL (string, ptype, eatype, atype) \ - { string, sizeof(string) - 1, ptype, eatype, atype } +#define BPF_PROG_SEC_IMPL (string, ptype, eatype, is_attachable, atype) \ + { string, sizeof(string) - 1, ptype, eatype, is_attachable, atype }/* Programs that can NOT be attached. */ -#define BPF_PROG_SEC (string, ptype) BPF_PROG_SEC_IMPL(string, ptype, 0, -EINVAL) +#define BPF_PROG_SEC (string, ptype) BPF_PROG_SEC_IMPL(string, ptype, 0, 0, 0)/* Programs that can be attached. */ #define BPF_APROG_SEC (string, ptype, atype) \ - BPF_PROG_SEC_IMPL(string, ptype, 0, atype) + BPF_PROG_SEC_IMPL(string, ptype, 0, 1, atype)/* Programs that must specify expected attach type at load time. */ #define BPF_EAPROG_SEC (string, ptype, eatype) \ - BPF_PROG_SEC_IMPL(string, ptype, eatype, eatype) + BPF_PROG_SEC_IMPL(string, ptype, eatype, 1, eatype)/* Programs that can be attached but attach type can't be identified by section * name. Kept for backward compatibility.
@@ -2108,6 +2108,7 @@ static const struct {size_t len;enum bpf_prog_type prog_type;enum bpf_attach_type expected_attach_type; +int is_attachable;enum bpf_attach_type attach_type; } section_names[] = { BPF_PROG_SEC("socket", BPF_PROG_TYPE_SOCKET_FILTER),
@@ -2198,7 +2199,7 @@ int libbpf_attach_type_by_name(const char *name,for (i =0 ; i <ARRAY_SIZE (section_names); i++) {if (strncmp (name, section_names[i].sec, section_names[i].len))continue ; -if (section_names[i].attach_type == -EINVAL ) +if (!section_names[i].is_attachable)return -EINVAL ; *attach_type = section_names[i].attach_type;return 0 ;
Signature · 1 line
2.17.1
Em Wed, Oct 31, 2018 at 12:57:18PM -0700, Andrey Ignatov escreveu:
Quoted 6 lines
Arnaldo Carvalho de Melo reported build error in libbpf when clang version 3.8.1-24 (tags/RELEASE_381/final) is used:
libbpf.c:2201:36: error: comparison of constant -22 with expression of type 'const enum
bpf_attach_type' is always false [-Werror,-Wtautological-constant-out-of-range-compare]
Quoted 6 lines
if (section_names[i].attach_type == -EINVAL) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~1 error generated.
Fix the error by keeping "
is_attachable" property of a program in a separate struct field instead of trying to useattach_typeitself.
Thanks, now it builds in all the previously failing systems:
# export PERF_TARBALL=http://192.168.86.4/perf/perf-4.19.0.tar.xz # dm debian:9 fedora:25 fedora:26 fedora:27 ubuntu:16.04 ubuntu:17.10 1 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 clang version 3.8.1-24 (tags/RELEASE_381/final) 2 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1) clang version 3.9.1 (tags/RELEASE_391/final) 3 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2) clang version 4.0.1 (tags/RELEASE_401/final) 4 fedora:27 : Ok gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6) clang version 5.0.2 (tags/RELEASE_502/final) 5 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final) 6 ubuntu:17.10 : Ok gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0 clang version 4.0.1-6 (tags/RELEASE_401/final) #
I also have it tentatively applied to my perf/urgent branch, that I'll push upstream soon.
- Arnaldo
Quoted 55 lines
Fixes commit 956b620fcf0b ("libbpf: Introduce libbpf_attach_type_by_name")Reported-by Arnaldo Carvalho de Melo <[email protected]>Signed-off-by Andrey Ignatov <[email protected]>--- tools/lib/bpf/libbpf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)tools/lib/bpf/libbpf.c +7
-6@@ -2084,19 +2084,19 @@ void bpf_program__set_expected_attach_type(struct bpf_program *prog, prog->expected_attach_type = type; } -#define BPF_PROG_SEC_IMPL (string, ptype, eatype, atype) \ - { string, sizeof(string) - 1, ptype, eatype, atype } +#define BPF_PROG_SEC_IMPL (string, ptype, eatype, is_attachable, atype) \ + { string, sizeof(string) - 1, ptype, eatype, is_attachable, atype }/* Programs that can NOT be attached. */ -#define BPF_PROG_SEC (string, ptype) BPF_PROG_SEC_IMPL(string, ptype, 0, -EINVAL) +#define BPF_PROG_SEC (string, ptype) BPF_PROG_SEC_IMPL(string, ptype, 0, 0, 0)/* Programs that can be attached. */ #define BPF_APROG_SEC (string, ptype, atype) \ - BPF_PROG_SEC_IMPL(string, ptype, 0, atype) + BPF_PROG_SEC_IMPL(string, ptype, 0, 1, atype)/* Programs that must specify expected attach type at load time. */ #define BPF_EAPROG_SEC (string, ptype, eatype) \ - BPF_PROG_SEC_IMPL(string, ptype, eatype, eatype) + BPF_PROG_SEC_IMPL(string, ptype, eatype, 1, eatype)/* Programs that can be attached but attach type can't be identified by section * name. Kept for backward compatibility. @@ -2108,6 +2108,7 @@ static const struct {size_t len;enum bpf_prog_type prog_type;enum bpf_attach_type expected_attach_type; +int is_attachable;enum bpf_attach_type attach_type; } section_names[] = { BPF_PROG_SEC("socket", BPF_PROG_TYPE_SOCKET_FILTER),@@ -2198,7 +2199,7 @@ int libbpf_attach_type_by_name(const char *name,for (i =0 ; i <ARRAY_SIZE (section_names); i++) {if (strncmp (name, section_names[i].sec, section_names[i].len))continue ; -if (section_names[i].attach_type == -EINVAL ) +if (!section_names[i].is_attachable)return -EINVAL ; *attach_type = section_names[i].attach_type;return 0 ;Signature · 1 line
2.17.1
Daniel Borkmann
maintainerQuoted 26 lines · Arnaldo Carvalho de Melo
Em Wed, Oct 31, 2018 at 12:57:18PM -0700, Andrey Ignatov escreveu:
Quoted 6 lines
Arnaldo Carvalho de Melo reported build error in libbpf when clang version 3.8.1-24 (tags/RELEASE_381/final) is used:
libbpf.c:2201:36: error: comparison of constant -22 with expression of type 'const enum
bpf_attach_type' is always false [-Werror,-Wtautological-constant-out-of-range-compare]Quoted 6 lines
if (section_names[i].attach_type == -EINVAL) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~1 error generated.
Fix the error by keeping "
is_attachable" property of a program in a separate struct field instead of trying to useattach_typeitself.Thanks, now it builds in all the previously failing systems:
# export PERF_TARBALL=http://192.168.86.4/perf/perf-4.19.0.tar.xz # dm debian:9 fedora:25 fedora:26 fedora:27 ubuntu:16.04 ubuntu:17.10 1 debian:9 : Ok gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516 clang version 3.8.1-24 (tags/RELEASE_381/final) 2 fedora:25 : Ok gcc (GCC) 6.4.1 20170727 (Red Hat 6.4.1-1) clang version 3.9.1 (tags/RELEASE_391/final) 3 fedora:26 : Ok gcc (GCC) 7.3.1 20180130 (Red Hat 7.3.1-2) clang version 4.0.1 (tags/RELEASE_401/final) 4 fedora:27 : Ok gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-6) clang version 5.0.2 (tags/RELEASE_502/final) 5 ubuntu:16.04 : Ok gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609 clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final) 6 ubuntu:17.10 : Ok gcc (Ubuntu 7.2.0-8ubuntu3.2) 7.2.0 clang version 4.0.1-6 (tags/RELEASE_401/final) #
Quoted 1 line
Thanks everyone, applied to bpf tree.