diff options
| author | Andrii Nakryiko <[email protected]> | 2021-03-18 19:40:36 +0000 |
|---|---|---|
| committer | Alexei Starovoitov <[email protected]> | 2021-03-18 23:14:23 +0000 |
| commit | a0964f526df6facd4e12a4c416185013026eecf9 (patch) | |
| tree | 72d416410a0f4f26e673324551acb8a97e342969 /tools/testing/selftests/bpf/progs/test_static_linked2.c | |
| parent | selftests/bpf: Pass all BPF .o's through BPF static linker (diff) | |
| download | kernel-a0964f526df6facd4e12a4c416185013026eecf9.tar.gz kernel-a0964f526df6facd4e12a4c416185013026eecf9.zip | |
selftests/bpf: Add multi-file statically linked BPF object file test
Add Makefile infra to specify multi-file BPF object files (and derivative
skeletons). Add first selftest validating BPF static linker can merge together
successfully two independent BPF object files and resulting object and
skeleton are correct and usable.
Use the same F(F(F(X))) = F(F(X)) identity test on linked object files as for
the case of single BPF object files.
Signed-off-by: Andrii Nakryiko <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
Diffstat (limited to 'tools/testing/selftests/bpf/progs/test_static_linked2.c')
| -rw-r--r-- | tools/testing/selftests/bpf/progs/test_static_linked2.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/test_static_linked2.c b/tools/testing/selftests/bpf/progs/test_static_linked2.c new file mode 100644 index 000000000000..54d8d1ab577c --- /dev/null +++ b/tools/testing/selftests/bpf/progs/test_static_linked2.c @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2021 Facebook */ + +#include <linux/bpf.h> +#include <bpf/bpf_helpers.h> + +/* 4-byte aligned .bss */ +static volatile int static_var2; +static volatile int static_var22; +int var2 = 0; +/* 8-byte aligned .rodata */ +const volatile long rovar2; + +/* same "subprog" name in both files */ +static __noinline int subprog(int x) +{ + /* but different formula */ + return x * 3; +} + +SEC("raw_tp/sys_enter") +int handler2(const void *ctx) +{ + var2 = subprog(rovar2) + static_var2 + static_var22; + + return 0; +} + +/* different name and/or type of the variable doesn't matter */ +char _license[] SEC("license") = "GPL"; +int _version SEC("version") = 1; |
