From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arnaldo Carvalho de Melo Subject: Re: [PATCH bpf] libbpf: Fix compile error in libbpf_attach_type_by_name Date: Wed, 31 Oct 2018 17:49:57 -0300 Message-ID: <20181031204957.GD28340@kernel.org> References: <20181031195718.307757-1-rdna@fb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: netdev@vger.kernel.org, ast@kernel.org, daniel@iogearbox.net, kernel-team@fb.com To: Andrey Ignatov Return-path: Received: from mail.kernel.org ([198.145.29.99]:39604 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726167AbeKAFtn (ORCPT ); Thu, 1 Nov 2018 01:49:43 -0400 Content-Disposition: inline In-Reply-To: <20181031195718.307757-1-rdna@fb.com> Sender: netdev-owner@vger.kernel.org List-ID: Em Wed, Oct 31, 2018 at 12:57:18PM -0700, Andrey Ignatov escreveu: > 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. 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) # Tested-by: Arnaldo Carvalho de Melo I also have it tentatively applied to my perf/urgent branch, that I'll push upstream soon. - Arnaldo > Fixes: commit 956b620fcf0b ("libbpf: Introduce libbpf_attach_type_by_name") > Reported-by: Arnaldo Carvalho de Melo > Signed-off-by: Andrey Ignatov > --- > tools/lib/bpf/libbpf.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index b607be7236d3..d6e62e90e8d4 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -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; > -- > 2.17.1