On Wed, Feb 7, 2024 at 5:59 PM Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> wrote: > > On Wed, Feb 7, 2024 at 5:17 PM Andrii Nakryiko > <andrii.nakryiko@xxxxxxxxx> wrote: > > > > On Tue, Feb 6, 2024 at 2:05 PM Alexei Starovoitov > > <alexei.starovoitov@xxxxxxxxx> wrote: > > > > > > From: Alexei Starovoitov <ast@xxxxxxxxxx> > > > > > > __uint() macro that is used to specify map attributes like: > > > __uint(type, BPF_MAP_TYPE_ARRAY); > > > __uint(map_flags, BPF_F_MMAPABLE); > > > is limited to 32-bit, since BTF_KIND_ARRAY has u32 "number of elements" field. > > > > > > Introduce __ulong() macro that allows specifying values bigger than 32-bit. > > > In map definition "map_extra" is the only u64 field. > > > > > > Signed-off-by: Alexei Starovoitov <ast@xxxxxxxxxx> > > > --- > > > tools/lib/bpf/bpf_helpers.h | 1 + > > > tools/lib/bpf/libbpf.c | 44 ++++++++++++++++++++++++++++++++++--- > > > 2 files changed, 42 insertions(+), 3 deletions(-) > > > > > > diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h > > > index 9c777c21da28..fb909fc6866d 100644 > > > --- a/tools/lib/bpf/bpf_helpers.h > > > +++ b/tools/lib/bpf/bpf_helpers.h > > > @@ -13,6 +13,7 @@ > > > #define __uint(name, val) int (*name)[val] > > > #define __type(name, val) typeof(val) *name > > > #define __array(name, val) typeof(val) *name[] > > > +#define __ulong(name, val) enum name##__enum { name##__value = val } name > > > > Can you try using __ulong() twice in the same file? enum type and > > value names have global visibility, so I suspect second use with the > > same field name would cause compilation error > > Good point will change it to: > > #define __ulong(name, val) enum { __PASTE(__unique_value,__COUNTER__) > = val } name yep, that should work. We still can have name collisions across multiple files, but it doesn't matter when linking two .bpf.o files.