On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@xxxxxxxxx> wrote: > > According to a report, skeletons fail to assign shadow pointers when being > compiled with C++ programs. Unlike C doing implicit casting for void > pointers, C++ requires an explicit casting. > > To support C++, we do explicit casting for each shadow pointer. > > Cc: yhs@xxxxxxxx > Signed-off-by: Kui-Feng Lee <thinker.li@xxxxxxxxx> > --- > tools/bpf/bpftool/gen.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/bpf/bpftool/gen.c b/tools/bpf/bpftool/gen.c > index 4fa4ade1ce74..dedafea0c127 100644 > --- a/tools/bpf/bpftool/gen.c > +++ b/tools/bpf/bpftool/gen.c > @@ -1131,7 +1131,7 @@ static void gen_st_ops_shadow_init(struct btf *btf, struct bpf_object *obj) > continue; > codegen("\ > \n\ > - obj->struct_ops.%1$s = bpf_map__initial_value(obj->maps.%1$s, NULL);\n\ > + obj->struct_ops.%1$s = (typeof(obj->struct_ops.%1$s))bpf_map__initial_value(obj->maps.%1$s, NULL);\n\ Given we have a named struct type for this and we use explicit type names in other parts of generated skeleton code, let's maybe use "struct %s__%s__%s" explicitly here (passing in obj_name, ident, type_name)? No strong preferences, but feels like a consistent approach here would be nice. > \n\ > ", ident); > } > -- > 2.34.1 >