[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cf6541f6-25eb-b858-3d4b-fbc68666cbba@iogearbox.net>
Date: Fri, 1 Mar 2019 21:02:07 +0100
From: Daniel Borkmann <daniel@...earbox.net>
To: Andrii Nakryiko <andrii.nakryiko@...il.com>
Cc: Alexei Starovoitov <ast@...com>, bpf@...r.kernel.org,
Networking <netdev@...r.kernel.org>, joe@...d.net.nz,
john.fastabend@...il.com, tgraf@...g.ch,
Yonghong Song <yhs@...com>, Andrii Nakryiko <andriin@...com>,
Jakub Kicinski <jakub.kicinski@...ronome.com>,
lmb@...udflare.com
Subject: Re: [PATCH bpf-next v2 6/7] bpf, selftest: test global
data/bss/rodata sections
On 03/01/2019 08:13 PM, Andrii Nakryiko wrote:
> On Thu, Feb 28, 2019 at 3:32 PM Daniel Borkmann <daniel@...earbox.net> wrote:
>> From: Joe Stringer <joe@...d.net.nz>
>>
>> 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 <joe@...d.net.nz>
>> Signed-off-by: Daniel Borkmann <daniel@...earbox.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.c
>>
>> diff --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
Powered by blists - more mailing lists