mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
bpftool: Cast pointers for shadow types explicitly.
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. Also add struct_ops_module.skel.h to test_cpp to validate C++ compilation as part of BPF selftests. Signed-off-by: Kui-Feng Lee <thinker.li@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Yonghong Song <yonghong.song@linux.dev> Acked-by: Quentin Monnet <quentin@isovalent.com> Link: https://lore.kernel.org/bpf/20240312013726.1780720-1-thinker.li@gmail.com
This commit is contained in:
parent
9187210eee
commit
c2a0257c1e
@ -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 = 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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user