Re: [PATCH bpf-next] bpf: disable some `attribute ignored' warnings in GCC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 5/6/24 11:32 AM, Yonghong Song wrote:
> 
> 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.

A small note here - the above series does not itself contain the patch
to support decl_tag, it is just some prerequisite structural changes and
the option to prune BTF before emission similar to clang to slim the
selftest (and other) program sizes down.

The patch to enable decl_tag for functions in BTF, enough for the
selftest harness, can go up after that. But, it will require some
approvals from the C front-end maintainers, since it is a new attribute,
so it may take longer, and may be contentious.

> 
>>
>>    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@xxxxxxxxxx>
>> Cc: david.faust@xxxxxxxxxx
>> Cc: cupertino.miranda@xxxxxxxxxx
>> Cc: Yonghong Song <yonghong.song@xxxxxxxxx>
>> Cc: Eduard Zingerman <eddyz87@xxxxxxxxx>
>> ---
>>   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@xxxxxxxxx>
> 
>>   endef
>>   
>>   SKEL_BLACKLIST := btf__% test_pinning_invalid.c test_sk_assign.c




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux