BPF List
 help / color / mirror / Atom feed
From: Yonghong Song <yonghong.song@linux.dev>
To: "Jose E. Marchesi" <jose.marchesi@oracle.com>, bpf@vger.kernel.org
Cc: david.faust@oracle.com, cupertino.miranda@oracle.com,
	Eduard Zingerman <eddyz87@gmail.com>
Subject: Re: [PATCH bpf-next] bpf: disable some `attribute ignored' warnings in GCC
Date: Mon, 6 May 2024 11:32:06 -0700	[thread overview]
Message-ID: <a95b1917-80aa-4c81-942d-91f369d31bb2@linux.dev> (raw)
In-Reply-To: <20240503123213.5380-1-jose.marchesi@oracle.com>


On 5/3/24 5:32 AM, Jose E. Marchesi wrote:
> This patch modifies selftests/bpf/Makefile to pass -Wno-attributes to
> GCC.  This is because of the following attributes which are ignored:
>
> - btf_decl_tag
> - btf_type_tag
>
>    There are many of these.  At the moment none of these are
>    recognized/handled by gcc-bpf.
>
>    We are aware that btf_decl_tag is necessary for some of the
>    selftest harness to communicate test failure/success.  Support for
>    it is in progress in GCC upstream:
>
>    https://gcc.gnu.org/pipermail/gcc-patches/2024-May/650482.html
>
>    However, the GCC master branch is not yet open, so the series
>    above (currently under review upstream) wont be able to make it
>    there until 14.1 gets released, probably mid next week.

Thanks. It would be great if the patch can be merged soon.

>
>    As for btf_type_tag, more extensive work will be needed in GCC
>    upstream to support it in both BTF and DWARF.  We have a WIP big
>    patch for that, but that is not needed to compile/build the
>    selftests.

Thanks. Eduard has implemented in llvm with agreed new format. Since
the old phabricator becomes readonly, he will upstream the original
patch to llvm-project soon.

>
> - used
>
>    There are SEC macros defined in the selftests as:
>
>    #define SEC(N) __attribute__((section(N),used))
>
>    The SEC macro is used for both functions and global variables.
>    According to the GCC documentation `used' attribute is really only
>    meaningful for functions, and it warns when the attribute is used
>    for other global objects, like for example ctl_array in
>    test_xdp_noinline.c.
>
>    Ignoring this is bening.

Bening -> Benign?

>
> - visibility
>
>    In progs/cpumask_common.h:13 there is:
>
>      #define private(name) SEC(".bss." #name) __hidden __attribute__((aligned(8)))
>      private(MASK) static struct bpf_cpumask __kptr * global_mask;
>
>    The __hidden macro defines to:
>
>    tools/lib/bpf/bpf_helpers.h:#define __hidden __attribute__((visibility("hidden")))
>
>    GCC emits an "attribute ignored" warning because static implies
>    hidden visibility.
>
>    Ignoring this warning is benign.  An alternative would be to make
>    global_mask as non-static.

In the above, let us just remove __hidden from the '#define'.
As you mentioned, the 'global_mask' is already a static variable,
adding '__hidden' is not really needed at all.

>
> - align_value
>
>    In progs/test_cls_redirect.c:127 there is:
>
>    typedef uint8_t *net_ptr __attribute__((align_value(8)));
>
>    GCC warns that it is ignoring this attribute, because it is not
>    implemented by GCC.
>
>    I think ignoring this attribute in GCC is bening, because according

Bening -> Benign?

>    to the clang documentation [1] its purpose seems to be merely
>    declarative and doesn't seem to translate into extra checks at
>    run-time, only to pehaps better optimized code ("runtime behavior is
>    undefined if the pointed memory object is not aligned to the
>    specified alignment").

Yes, the attribute does not really enforce at runtime. It merely
give a declarative requirement.

>
>    [1] https://clang.llvm.org/docs/AttributeReference.html#align-value
>
> Tested in bpf-next master.
>
> Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
> Cc: david.faust@oracle.com
> Cc: cupertino.miranda@oracle.com
> Cc: Yonghong Song <yonghong.song@linux.dev>
> Cc: Eduard Zingerman <eddyz87@gmail.com>
> ---
>   tools/testing/selftests/bpf/Makefile | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index ba28d42b74db..5d9c906bc3cb 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -431,7 +431,7 @@ endef
>   # Build BPF object using GCC
>   define GCC_BPF_BUILD_RULE
>   	$(call msg,GCC-BPF,$(TRUNNER_BINARY),$2)
> -	$(Q)$(BPF_GCC) $3 -O2 -c $1 -o $2
> +	$(Q)$(BPF_GCC) $3 -Wno-attributes -O2 -c $1 -o $2

LGTM with above a few nits.
Acked-by: Yonghong Song <yonghong.song@linux.dev>

>   endef
>   
>   SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c

  reply	other threads:[~2024-05-06 18:32 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-03 12:32 [PATCH bpf-next] bpf: disable some `attribute ignored' warnings in GCC Jose E. Marchesi
2024-05-06 18:32 ` Yonghong Song [this message]
2024-05-06 19:09   ` David Faust
2024-05-06 21:42     ` Yonghong Song

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a95b1917-80aa-4c81-942d-91f369d31bb2@linux.dev \
    --to=yonghong.song@linux.dev \
    --cc=bpf@vger.kernel.org \
    --cc=cupertino.miranda@oracle.com \
    --cc=david.faust@oracle.com \
    --cc=eddyz87@gmail.com \
    --cc=jose.marchesi@oracle.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox