Re: [PATCH bpf-next v2 6/7] bpf, selftest: test global data/bss/rodata sections
From: Daniel Borkmann <daniel@iogearbox.net>
Date: 2019-03-01 20:02:11
Also in:
bpf
On 03/01/2019 08:13 PM, Andrii Nakryiko wrote:
On Thu, Feb 28, 2019 at 3:32 PM Daniel Borkmann [off-list ref] wrote:quoted
From: Joe Stringer <redacted> Add tests for libbpf relocation of static variable references into the .data, .rodata and .bss sections of the ELF. Tests with different offsets are all passing: # ./test_progs [...] test_static_data_access:PASS:load program 0 nsec test_static_data_access:PASS:pass packet 278 nsec test_static_data_access:PASS:relocate .bss reference 1 278 nsec test_static_data_access:PASS:relocate .data reference 1 278 nsec test_static_data_access:PASS:relocate .rodata reference 1 278 nsec test_static_data_access:PASS:relocate .bss reference 2 278 nsec test_static_data_access:PASS:relocate .data reference 2 278 nsec test_static_data_access:PASS:relocate .rodata reference 2 278 nsec test_static_data_access:PASS:relocate .bss reference 3 278 nsec test_static_data_access:PASS:relocate .bss reference 4 278 nsec Summary: 223 PASSED, 0 FAILED Joint work with Daniel Borkmann. Signed-off-by: Joe Stringer <redacted> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> --- tools/testing/selftests/bpf/bpf_helpers.h | 2 +- .../selftests/bpf/progs/test_global_data.c | 61 +++++++++++++++++++ tools/testing/selftests/bpf/test_progs.c | 50 +++++++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/bpf/progs/test_global_data.cdiff --git a/tools/testing/selftests/bpf/bpf_helpers.h b/tools/testing/selftests/bpf/bpf_helpers.h index d9999f1ed1d2..0463662935f9 100644 --- a/tools/testing/selftests/bpf/bpf_helpers.h +++ b/tools/testing/selftests/bpf/bpf_helpers.h@@ -11,7 +11,7 @@ /* helper functions called from eBPF programs written in C */ static void *(*bpf_map_lookup_elem)(void *map, void *key) = (void *) BPF_FUNC_map_lookup_elem; -static int (*bpf_map_update_elem)(void *map, void *key, void *value, +static int (*bpf_map_update_elem)(void *map, const void *key, const void *value, unsigned long long flags) = (void *) BPF_FUNC_map_update_elem; static int (*bpf_map_delete_elem)(void *map, void *key) =diff --git a/tools/testing/selftests/bpf/progs/test_global_data.c b/tools/testing/selftests/bpf/progs/test_global_data.c new file mode 100644 index 000000000000..2a7cf40b8efb --- /dev/null +++ b/tools/testing/selftests/bpf/progs/test_global_data.c@@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (c) 2019 Isovalent, Inc. + +#include <linux/bpf.h> +#include <linux/pkt_cls.h> +#include <string.h> + +#include "bpf_helpers.h" + +struct bpf_map_def SEC("maps") result = { + .type = BPF_MAP_TYPE_ARRAY, + .key_size = sizeof(__u32), + .value_size = sizeof(__u64), + .max_entries = 9, +}; + +static __u64 static_bss = 0; /* Reloc reference to .bss section */ +static __u64 static_data = 42; /* Reloc reference to .data section */ +static const __u64 static_rodata = 24; /* Reloc reference to .rodata section */ +static __u64 static_bss2 = 0; /* Reloc reference to .bss section */ +static __u64 static_data2 = 0xffeeff; /* Reloc reference to .data section */ +static const __u64 static_rodata2 = 0xabab; /* Reloc reference to .rodata section */ +static const __u64 static_rodata3 = 0xab; /* Reloc reference to .rodata section */In the light of Yonghong's explanation about static vs non-static globals, it would be nice to add test for non-static initialized globals here as well?
Yes, agree, I'll add them as well and integrate the correct offset for libbpf along with it. Cheers, Daniel