On Mon, Apr 24, 2023 at 6:56 PM Yonghong Song <yhs@xxxxxxxx> wrote: > > > > On 4/24/23 5:01 PM, Stanislav Fomichev wrote: > > From: Peng Wei <pengweiprc@xxxxxxxxxx> > > > > Compiling C++ BPF programs with existing bpf_helper_defs.h is not > > possible due to stricter C++ type conversions. C++ complains > > about (void *) type conversions: > > > > bpf_helper_defs.h:57:67: error: invalid conversion from ‘void*’ to ‘void* (*)(void*, const void*)’ [-fpermissive] > > 57 | static void *(*bpf_map_lookup_elem)(void *map, const void *key) = (void *) 1; > > | ^~~~~~~~~~ > > | | > > | void* > > > > Extend bpf_doc.py to use proper function type instead of void. > > Could you specify what exactly the compilation command triggering the > above error? The following does it for me: clang++ --include linux/types.h ./tools/lib/bpf/bpf_helper_defs.h > > > > Before: > > static void *(*bpf_map_lookup_elem)(void *map, const void *key) = (void *) 1; > > > > After: > > static void *(*bpf_map_lookup_elem)(void *map, const void *key) = (void *(*)(void *map, const void *key)) 1; > > > > Signed-off-by: Peng Wei <pengweiprc@xxxxxxxxxx> > > Signed-off-by: Stanislav Fomichev <sdf@xxxxxxxxxx> > > --- > > scripts/bpf_doc.py | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/scripts/bpf_doc.py b/scripts/bpf_doc.py > > index eaae2ce78381..fa21137a90e7 100755 > > --- a/scripts/bpf_doc.py > > +++ b/scripts/bpf_doc.py > > @@ -827,6 +827,9 @@ COMMANDS > > print(' *{}{}'.format(' \t' if line else '', line)) > > > > print(' */') > > + fptr_type = '%s%s(*)(' % ( > > + self.map_type(proto['ret_type']), > > + ((' ' + proto['ret_star']) if proto['ret_star'] else '')) > > print('static %s %s(*%s)(' % (self.map_type(proto['ret_type']), > > proto['ret_star'], proto['name']), end='') > > comma = '' > > @@ -845,8 +848,10 @@ COMMANDS > > one_arg += '{}'.format(n) > > comma = ', ' > > print(one_arg, end='') > > + fptr_type += one_arg > > > > - print(') = (void *) %d;' % helper.enum_val) > > + fptr_type += ')' > > + print(') = (%s) %d;' % (fptr_type, helper.enum_val)) > > print('') > > > > ###############################################################################