From: "Jose E. Marchesi" <jose.marchesi@oracle.com>
To: Yonghong Song <yonghong.song@linux.dev>
Cc: bpf@vger.kernel.org, Andrii Nakryiko <andrii.nakryiko@gmail.com>,
Yonghong Song <yhs@meta.com>,
Eduard Zingerman <eddyz87@gmail.com>,
David Faust <david.faust@oracle.com>,
Cupertino Miranda <cupertino.miranda@oracle.com>
Subject: Re: [PATCH bpf-next V2] bpf: use -Wno-address-of-packed-member when building with GCC
Date: Thu, 01 Feb 2024 12:10:56 +0100 [thread overview]
Message-ID: <8734ucfni7.fsf@oracle.com> (raw)
In-Reply-To: <aab2e90a-aa65-480f-8f08-186ebe3e81de@linux.dev> (Yonghong Song's message of "Wed, 31 Jan 2024 10:33:57 -0800")
> On 1/31/24 1:44 AM, Jose E. Marchesi wrote:
>> [Differences from V1:
>> - Now pragmas are used in testfiles instead of flags
>> in Makefile.]
>>
>> GCC implements the -Wno-address-of-packed-member warning, which is
>> enabled by -Wall, that warns about taking the address of a packed
>> struct field when it can lead to an "unaligned" address. Clang
>> doesn't support this warning.
>
> Look like this is not true.
>
> $ cat t.c
> struct __attribute__ ((packed)) Packed {
> char a;
> int b;
> int c;
> char d;
> };
>
> void test(const int *i, int *ptr);
> int foo() {
> struct Packed p;
> p.c = 1;
> test(&p.c, &p.c);
> return 0;
> }
> $ /home/yhs/work/llvm-project/llvm/build.16/install/bin/clang --version
> clang version 16.0.3 (https://github.com/llvm/llvm-project.git da3cd333bea572fb10470f610a27f22bcb84b08c)
> Target: x86_64-unknown-linux-gnu
> Thread model: posix
> InstalledDir: /home/yhs/work/llvm-project/llvm/build.16/install/bin
> $ /home/yhs/work/llvm-project/llvm/build.16/install/bin/clang --target=bpf -O2 -c t.c
> t.c:12:9: warning: taking address of packed member 'c' of class or structure 'Packed' may result in an unaligned pointer value [-Waddress-of-packed-member]
> test(&p.c, &p.c);
> ^~~
> t.c:12:15: warning: taking address of packed member 'c' of class or structure 'Packed' may result in an unaligned pointer value [-Waddress-of-packed-member]
> test(&p.c, &p.c);
> ^~~
> 2 warnings generated.
> $ /home/yhs/work/llvm-project/llvm/build.16/install/bin/clang --target=bpf -O2 -c t.c -Wno-address-of-packed-member
> $
Hm I can actually confirm my local clang (18.0.0
586986a063ee4b9a7490aac102e103bab121c764) does support the warning.
I should have been confused by some other warning. I'm dealing with
many of them. Sorry about that.
I will submit a patch to remove the !__clang__ conditionals.
> But each compiler internal diag detection logic could be different, so
> it is totally possible that gcc might emit warning while clang does not
> like in some selftests mentioned.
>
>>
>> This triggers the following errors (-Werror) when building three
>> particular BPF selftests with GCC:
>>
>> progs/test_cls_redirect.c
>> 986 | if (ipv4_is_fragment((void *)&encap->ip)) {
>> progs/test_cls_redirect_dynptr.c
>> 410 | pkt_ipv4_checksum((void *)&encap_gre->ip);
>> progs/test_cls_redirect.c
>> 521 | pkt_ipv4_checksum((void *)&encap_gre->ip);
>> progs/test_tc_tunnel.c
>> 232 | set_ipv4_csum((void *)&h_outer.ip);
>>
>> These warnings do not signal any real problem in the tests as far as I
>> can see.
>>
>> This patch adds pragmas to these test files that inhibit the
>> -Waddress-of-packed-member if the compiler is not Clang.
>>
>> Tested in bpf-next master.
>> No regressions.
>>
>> Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
>> Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
>> Cc: Yonghong Song <yhs@meta.com>
>> Cc: Eduard Zingerman <eddyz87@gmail.com>
>> Cc: David Faust <david.faust@oracle.com>
>> Cc: Cupertino Miranda <cupertino.miranda@oracle.com>
>> ---
>> tools/testing/selftests/bpf/progs/test_cls_redirect.c | 4 ++++
>> tools/testing/selftests/bpf/progs/test_cls_redirect_dynptr.c | 4 ++++
>> tools/testing/selftests/bpf/progs/test_tc_tunnel.c | 4 ++++
>> 3 files changed, 12 insertions(+)
>>
>> diff --git a/tools/testing/selftests/bpf/progs/test_cls_redirect.c b/tools/testing/selftests/bpf/progs/test_cls_redirect.c
>> index 66b304982245..23e950ad84d2 100644
>> --- a/tools/testing/selftests/bpf/progs/test_cls_redirect.c
>> +++ b/tools/testing/selftests/bpf/progs/test_cls_redirect.c
>> @@ -22,6 +22,10 @@
>> #include "test_cls_redirect.h"
>> +#if !__clang__
>> +#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
>> +#endif
>
> So I suggest to remove the above '#if !__clang__' guard.
>
>> +
>> #ifdef SUBPROGS
>> #define INLINING __noinline
>> #else
> [...]
prev parent reply other threads:[~2024-02-01 11:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-31 9:44 [PATCH bpf-next V2] bpf: use -Wno-address-of-packed-member when building with GCC Jose E. Marchesi
2024-01-31 15:57 ` Eduard Zingerman
2024-01-31 18:33 ` Yonghong Song
2024-02-01 11:10 ` Jose E. Marchesi [this message]
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=8734ucfni7.fsf@oracle.com \
--to=jose.marchesi@oracle.com \
--cc=andrii.nakryiko@gmail.com \
--cc=bpf@vger.kernel.org \
--cc=cupertino.miranda@oracle.com \
--cc=david.faust@oracle.com \
--cc=eddyz87@gmail.com \
--cc=yhs@meta.com \
--cc=yonghong.song@linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.