On Wed, Apr 26, 2023 at 8:54 AM Stanislav Fomichev <sdf@xxxxxxxxxx> 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: > > $ clang++ --include linux/types.h ./tools/lib/bpf/bpf_helper_defs.h > > bpf_helper_defs.h:57:67: error: invalid conversion from ‘void*’ to ‘void* (*)(void*, const void*)’ [-fpermissive] Can you use -fpermissive instead? As Yonghong said, C++ is not really supported, so pretending we do will just cause more confusion and issues down the line. BTW, can you elaborate more on v4 vs v6 code reuse (or what was it)? I wonder if there is something that would stay within C domain that could be done? > 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. > > 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; > > v2: > - add clang++ invocation example (Yonghong) > > Cc: Yonghong Song <yhs@xxxxxxxx> > 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('') > > ############################################################################### > -- > 2.40.1.495.gc816e09b53d-goog >