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