diff mbox series

[bpf-next] selftests: Make sure all 'skel' variables are declared static

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

Commit Message

Toke Høiland-Jørgensen Sept. 29, 2020, 12:30 p.m. UTC
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(-)

Comments

Alexei Starovoitov Sept. 29, 2020, 6:46 p.m. UTC | #1
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?
Toke Høiland-Jørgensen Sept. 29, 2020, 8:59 p.m. UTC | #2
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 mbox series

Patch

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;