* [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly.
@ 2024-03-12 1:37 Kui-Feng Lee
2024-03-12 5:22 ` Yonghong Song
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Kui-Feng Lee @ 2024-03-12 1:37 UTC (permalink / raw)
To: bpf, ast, martin.lau, song, kernel-team, andrii
Cc: sinquersw, kuifeng, Kui-Feng Lee, yhs
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@meta.com
Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com>
---
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\
\n\
", ident);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-12 1:37 [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly Kui-Feng Lee @ 2024-03-12 5:22 ` Yonghong Song 2024-03-12 9:53 ` Quentin Monnet 2024-03-12 22:47 ` Andrii Nakryiko 2024-03-14 20:40 ` patchwork-bot+netdevbpf 2 siblings, 1 reply; 10+ messages in thread From: Yonghong Song @ 2024-03-12 5:22 UTC (permalink / raw) To: Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii Cc: sinquersw, kuifeng, yhs On 3/11/24 6:37 PM, Kui-Feng Lee 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@meta.com > Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> LGTM. Acked-by: Yonghong Song <yonghong.song@linux.dev> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-12 5:22 ` Yonghong Song @ 2024-03-12 9:53 ` Quentin Monnet 0 siblings, 0 replies; 10+ messages in thread From: Quentin Monnet @ 2024-03-12 9:53 UTC (permalink / raw) To: Yonghong Song, Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii Cc: sinquersw, kuifeng, yhs 2024-03-12 05:22 UTC+0000 ~ Yonghong Song <yonghong.song@linux.dev> > > On 3/11/24 6:37 PM, Kui-Feng Lee 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@meta.com >> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > > LGTM. > > Acked-by: Yonghong Song <yonghong.song@linux.dev> > Acked-by: Quentin Monnet <quentin@isovalent.com> Thanks! ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-12 1:37 [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly Kui-Feng Lee 2024-03-12 5:22 ` Yonghong Song @ 2024-03-12 22:47 ` Andrii Nakryiko 2024-03-13 0:07 ` Kui-Feng Lee 2024-03-14 20:40 ` patchwork-bot+netdevbpf 2 siblings, 1 reply; 10+ messages in thread From: Andrii Nakryiko @ 2024-03-12 22:47 UTC (permalink / raw) To: Kui-Feng Lee Cc: bpf, ast, martin.lau, song, kernel-team, andrii, sinquersw, kuifeng, yhs On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com > Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > --- > 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 > ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-12 22:47 ` Andrii Nakryiko @ 2024-03-13 0:07 ` Kui-Feng Lee 2024-03-13 0:27 ` Andrii Nakryiko 0 siblings, 1 reply; 10+ messages in thread From: Kui-Feng Lee @ 2024-03-13 0:07 UTC (permalink / raw) To: Andrii Nakryiko, Kui-Feng Lee Cc: bpf, ast, martin.lau, song, kernel-team, andrii, kuifeng, yhs On 3/12/24 15:47, Andrii Nakryiko wrote: > On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com >> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> >> --- >> 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)? I have considered about this solution. But, C++ works differently. It has nested namespaces. That means it should be referred as "XXX_skeleton::OOO_st_ops_map" in C++. Then, we need #if #else #endif directives to provide two separated casting. > > No strong preferences, but feels like a consistent approach here would be nice. > >> \n\ >> ", ident); >> } >> -- >> 2.34.1 >> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-13 0:07 ` Kui-Feng Lee @ 2024-03-13 0:27 ` Andrii Nakryiko 2024-03-13 0:37 ` Kui-Feng Lee 0 siblings, 1 reply; 10+ messages in thread From: Andrii Nakryiko @ 2024-03-13 0:27 UTC (permalink / raw) To: Kui-Feng Lee Cc: Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii, kuifeng, yhs On Tue, Mar 12, 2024 at 5:08 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: > > > > On 3/12/24 15:47, Andrii Nakryiko wrote: > > On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com > >> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > >> --- > >> 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)? > > I have considered about this solution. But, C++ works differently. It > has nested namespaces. That means it should be referred as > "XXX_skeleton::OOO_st_ops_map" in C++. Then, we need #if #else #endif > directives to provide two separated casting. > we cast to (struct <skeleton> *) by name of the skeleton, so it should be fine, I don't see why we'd need to do something C++ specific here > > > > No strong preferences, but feels like a consistent approach here would be nice. > > > >> \n\ > >> ", ident); > >> } > >> -- > >> 2.34.1 > >> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-13 0:27 ` Andrii Nakryiko @ 2024-03-13 0:37 ` Kui-Feng Lee 2024-03-13 15:51 ` Andrii Nakryiko 0 siblings, 1 reply; 10+ messages in thread From: Kui-Feng Lee @ 2024-03-13 0:37 UTC (permalink / raw) To: Andrii Nakryiko Cc: Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii, kuifeng, yhs On 3/12/24 17:27, Andrii Nakryiko wrote: > On Tue, Mar 12, 2024 at 5:08 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: >> >> >> >> On 3/12/24 15:47, Andrii Nakryiko wrote: >>> On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com >>>> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> >>>> --- >>>> 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)? >> >> I have considered about this solution. But, C++ works differently. It >> has nested namespaces. That means it should be referred as >> "XXX_skeleton::OOO_st_ops_map" in C++. Then, we need #if #else #endif >> directives to provide two separated casting. >> > > we cast to (struct <skeleton> *) by name of the skeleton, so it should > be fine, I don't see why we'd need to do something C++ specific here The skeleton looks like struct struct_ops_module { ...... struct { struct struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed { .... } testmod_zeroed; } struct_ops; }; struct struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed is inside of struct struct_ops_module. In C++, it should be referred as "struct_ops_module::struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed". The other option is moving definitions of these types to the top scope. > >>> >>> No strong preferences, but feels like a consistent approach here would be nice. >>> >>>> \n\ >>>> ", ident); >>>> } >>>> -- >>>> 2.34.1 >>>> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-13 0:37 ` Kui-Feng Lee @ 2024-03-13 15:51 ` Andrii Nakryiko 2024-03-14 20:36 ` Andrii Nakryiko 0 siblings, 1 reply; 10+ messages in thread From: Andrii Nakryiko @ 2024-03-13 15:51 UTC (permalink / raw) To: Kui-Feng Lee Cc: Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii, kuifeng, yhs On Tue, Mar 12, 2024 at 5:37 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: > > > > On 3/12/24 17:27, Andrii Nakryiko wrote: > > On Tue, Mar 12, 2024 at 5:08 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: > >> > >> > >> > >> On 3/12/24 15:47, Andrii Nakryiko wrote: > >>> On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com > >>>> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > >>>> --- > >>>> 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)? > >> > >> I have considered about this solution. But, C++ works differently. It > >> has nested namespaces. That means it should be referred as > >> "XXX_skeleton::OOO_st_ops_map" in C++. Then, we need #if #else #endif > >> directives to provide two separated casting. > >> > > > > we cast to (struct <skeleton> *) by name of the skeleton, so it should > > be fine, I don't see why we'd need to do something C++ specific here > > The skeleton looks like > > struct struct_ops_module { > ...... > struct { > struct > struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed { > .... > } testmod_zeroed; > } struct_ops; > }; > > struct struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed is > inside of struct struct_ops_module. In C++, it should be referred as > "struct_ops_module::struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed". ah, makes sense, thanks for elaborating > > The other option is moving definitions of these types to the top scope. no, it's fine the way you did it in this patch, I'll land it once bpf-next tree is open for new patches, thanks > > > > >>> > >>> No strong preferences, but feels like a consistent approach here would be nice. > >>> > >>>> \n\ > >>>> ", ident); > >>>> } > >>>> -- > >>>> 2.34.1 > >>>> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-13 15:51 ` Andrii Nakryiko @ 2024-03-14 20:36 ` Andrii Nakryiko 0 siblings, 0 replies; 10+ messages in thread From: Andrii Nakryiko @ 2024-03-14 20:36 UTC (permalink / raw) To: Kui-Feng Lee Cc: Kui-Feng Lee, bpf, ast, martin.lau, song, kernel-team, andrii, kuifeng, yhs On Wed, Mar 13, 2024 at 8:51 AM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Tue, Mar 12, 2024 at 5:37 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: > > > > > > > > On 3/12/24 17:27, Andrii Nakryiko wrote: > > > On Tue, Mar 12, 2024 at 5:08 PM Kui-Feng Lee <sinquersw@gmail.com> wrote: > > >> > > >> > > >> > > >> On 3/12/24 15:47, Andrii Nakryiko wrote: > > >>> On Mon, Mar 11, 2024 at 6:38 PM Kui-Feng Lee <thinker.li@gmail.com> 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@meta.com > > >>>> Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > > >>>> --- > > >>>> 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)? > > >> > > >> I have considered about this solution. But, C++ works differently. It > > >> has nested namespaces. That means it should be referred as > > >> "XXX_skeleton::OOO_st_ops_map" in C++. Then, we need #if #else #endif > > >> directives to provide two separated casting. > > >> > > > > > > we cast to (struct <skeleton> *) by name of the skeleton, so it should > > > be fine, I don't see why we'd need to do something C++ specific here > > > > The skeleton looks like > > > > struct struct_ops_module { > > ...... > > struct { > > struct > > struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed { > > .... > > } testmod_zeroed; > > } struct_ops; > > }; > > > > struct struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed is > > inside of struct struct_ops_module. In C++, it should be referred as > > "struct_ops_module::struct_ops_module__testmod_zeroed__bpf_testmod_ops___zeroed". > > ah, makes sense, thanks for elaborating > > > > > The other option is moving definitions of these types to the top scope. > > no, it's fine the way you did it in this patch, I'll land it once > bpf-next tree is open for new patches, thanks > so I made the following changes/additions as I was applying your patch: diff --git a/tools/bpf/bpftool/gen.c b/tools/bpf/bpftool/gen.c index dedafea0c127..3ce277544c24 100644 --- a/tools/bpf/bpftool/gen.c +++ b/tools/bpf/bpftool/gen.c @@ -1131,7 +1131,8 @@ static void gen_st_ops_shadow_init(struct btf *btf, struct bpf_object *obj) continue; codegen("\ \n\ - obj->struct_ops.%1$s = (typeof(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))\n\ + bpf_map__initial_value(obj->maps.%1$s, NULL);\n\ \n\ ", ident); } diff --git a/tools/testing/selftests/bpf/test_cpp.cpp b/tools/testing/selftests/bpf/test_cpp.cpp index f4936834f76f..dde0bb16e782 100644 --- a/tools/testing/selftests/bpf/test_cpp.cpp +++ b/tools/testing/selftests/bpf/test_cpp.cpp @@ -7,6 +7,7 @@ #include <bpf/bpf.h> #include <bpf/btf.h> #include "test_core_extern.skel.h" +#include "struct_ops_module.skel.h" template <typename T> class Skeleton { @@ -98,6 +99,7 @@ int main(int argc, char *argv[]) { struct btf_dump_opts opts = { }; struct test_core_extern *skel; + struct struct_ops_module *skel2; struct btf *btf; int fd; @@ -118,6 +120,9 @@ int main(int argc, char *argv[]) skel = test_core_extern__open_and_load(); test_core_extern__destroy(skel); + skel2 = struct_ops_module__open_and_load(); + struct_ops_module__destroy(skel2); + fd = bpf_enable_stats(BPF_STATS_RUN_TIME); if (fd < 0) std::cout << "FAILED to enable stats: " << fd << std::endl; test_cpp is a good think to validate that skeletons are compiled with C++ compiler just fine, so I referenced struct_ops-based skeleton there. > > > > > > > >>> > > >>> No strong preferences, but feels like a consistent approach here would be nice. > > >>> > > >>>> \n\ > > >>>> ", ident); > > >>>> } > > >>>> -- > > >>>> 2.34.1 > > >>>> ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly. 2024-03-12 1:37 [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly Kui-Feng Lee 2024-03-12 5:22 ` Yonghong Song 2024-03-12 22:47 ` Andrii Nakryiko @ 2024-03-14 20:40 ` patchwork-bot+netdevbpf 2 siblings, 0 replies; 10+ messages in thread From: patchwork-bot+netdevbpf @ 2024-03-14 20:40 UTC (permalink / raw) To: Kui-Feng Lee Cc: bpf, ast, martin.lau, song, kernel-team, andrii, sinquersw, kuifeng, yhs Hello: This patch was applied to bpf/bpf-next.git (master) by Andrii Nakryiko <andrii@kernel.org>: On Mon, 11 Mar 2024 18:37:26 -0700 you 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@meta.com > Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> > > [...] Here is the summary with links: - [bpf-next] bpftool: cast pointers for shadow types explicitly. https://git.kernel.org/bpf/bpf-next/c/c2a0257c1edf You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-03-14 20:40 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-03-12 1:37 [PATCH bpf-next] bpftool: cast pointers for shadow types explicitly Kui-Feng Lee 2024-03-12 5:22 ` Yonghong Song 2024-03-12 9:53 ` Quentin Monnet 2024-03-12 22:47 ` Andrii Nakryiko 2024-03-13 0:07 ` Kui-Feng Lee 2024-03-13 0:27 ` Andrii Nakryiko 2024-03-13 0:37 ` Kui-Feng Lee 2024-03-13 15:51 ` Andrii Nakryiko 2024-03-14 20:36 ` Andrii Nakryiko 2024-03-14 20:40 ` patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox