Message ID | 20200929123026.46751-1-toke@redhat.com |
---|---|
State | New |
Headers | show |
Series | [bpf-next] selftests: Make sure all 'skel' variables are declared static | expand |
On Tue, Sep 29, 2020 at 5:32 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: > > If programs in prog_tests using skeletons declare the 'skel' variable as > global but not static, that will lead to linker errors on the final link of > the prog_tests binary due to duplicate symbols. Fix a few instances of this. > > Fixes: b18c1f0aa477 ("bpf: selftest: Adapt sock_fields test to use skel and global variables") > Fixes: 9a856cae2217 ("bpf: selftest: Add test_btf_skc_cls_ingress") > Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> Thanks for the fix. Applied. I wonder why we don't see it with different gcc and clang versions. What linker do you use? And what kind of error do you see?
Alexei Starovoitov <alexei.starovoitov@gmail.com> writes: > On Tue, Sep 29, 2020 at 5:32 AM Toke Høiland-Jørgensen <toke@redhat.com> wrote: >> >> If programs in prog_tests using skeletons declare the 'skel' variable as >> global but not static, that will lead to linker errors on the final link of >> the prog_tests binary due to duplicate symbols. Fix a few instances of this. >> >> Fixes: b18c1f0aa477 ("bpf: selftest: Adapt sock_fields test to use skel and global variables") >> Fixes: 9a856cae2217 ("bpf: selftest: Add test_btf_skc_cls_ingress") >> Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> > > Thanks for the fix. Applied. You're welcome! And thanks :) > I wonder why we don't see it with different gcc and clang versions. Yeah, I was wondering about that as well, actually... > What linker do you use? > And what kind of error do you see? BINARY test_progs /usr/bin/ld: /home/build/linux/tools/testing/selftests/bpf/sock_fields.test.o:/home/build/linux/tools/testing/selftests/bpf/prog_tests/sock_fields.c:39: multiple definition of `skel'; /home/build/linux/tools/testing/selftests/bpf/btf_skc_cls_ingress.test.o:/home/build/linux/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c:19: first defined here collect2: error: ld returned 1 exit status make: *** [Makefile:397: /home/build/linux/tools/testing/selftests/bpf/test_progs] Error 1 $ ld --version GNU ld (GNU Binutils) 2.35 $ gcc --version gcc (GCC) 10.2.0 -Toke
diff --git a/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c b/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c index 4ce0e8a25bc5..86ccf37e26b3 100644 --- a/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c +++ b/tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c @@ -16,7 +16,7 @@ #include "test_progs.h" #include "test_btf_skc_cls_ingress.skel.h" -struct test_btf_skc_cls_ingress *skel; +static struct test_btf_skc_cls_ingress *skel; struct sockaddr_in6 srv_sa6; static __u32 duration; diff --git a/tools/testing/selftests/bpf/prog_tests/sock_fields.c b/tools/testing/selftests/bpf/prog_tests/sock_fields.c index 66e83b8fc69d..af87118e748e 100644 --- a/tools/testing/selftests/bpf/prog_tests/sock_fields.c +++ b/tools/testing/selftests/bpf/prog_tests/sock_fields.c @@ -36,7 +36,7 @@ struct bpf_spinlock_cnt { static struct sockaddr_in6 srv_sa6, cli_sa6; static int sk_pkt_out_cnt10_fd; -struct test_sock_fields *skel; +static struct test_sock_fields *skel; static int sk_pkt_out_cnt_fd; static __u64 parent_cg_id; static __u64 child_cg_id;
If programs in prog_tests using skeletons declare the 'skel' variable as global but not static, that will lead to linker errors on the final link of the prog_tests binary due to duplicate symbols. Fix a few instances of this. Fixes: b18c1f0aa477 ("bpf: selftest: Adapt sock_fields test to use skel and global variables") Fixes: 9a856cae2217 ("bpf: selftest: Add test_btf_skc_cls_ingress") Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com> --- tools/testing/selftests/bpf/prog_tests/btf_skc_cls_ingress.c | 2 +- tools/testing/selftests/bpf/prog_tests/sock_fields.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)