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] 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