Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /* Copyright (c) Meta Platforms, Inc. and affiliates. */
0003 
0004 #include <test_progs.h>
0005 #include "test_subskeleton.skel.h"
0006 #include "test_subskeleton_lib.subskel.h"
0007 
0008 static void subskeleton_lib_setup(struct bpf_object *obj)
0009 {
0010     struct test_subskeleton_lib *lib = test_subskeleton_lib__open(obj);
0011 
0012     if (!ASSERT_OK_PTR(lib, "open subskeleton"))
0013         return;
0014 
0015     *lib->rodata.var1 = 1;
0016     *lib->data.var2 = 2;
0017     lib->bss.var3->var3_1 = 3;
0018     lib->bss.var3->var3_2 = 4;
0019 
0020     test_subskeleton_lib__destroy(lib);
0021 }
0022 
0023 static int subskeleton_lib_subresult(struct bpf_object *obj)
0024 {
0025     struct test_subskeleton_lib *lib = test_subskeleton_lib__open(obj);
0026     int result;
0027 
0028     if (!ASSERT_OK_PTR(lib, "open subskeleton"))
0029         return -EINVAL;
0030 
0031     result = *lib->bss.libout1;
0032     ASSERT_EQ(result, 1 + 2 + 3 + 4 + 5 + 6, "lib subresult");
0033 
0034     ASSERT_OK_PTR(lib->progs.lib_perf_handler, "lib_perf_handler");
0035     ASSERT_STREQ(bpf_program__name(lib->progs.lib_perf_handler),
0036              "lib_perf_handler", "program name");
0037 
0038     ASSERT_OK_PTR(lib->maps.map1, "map1");
0039     ASSERT_STREQ(bpf_map__name(lib->maps.map1), "map1", "map name");
0040 
0041     ASSERT_EQ(*lib->data.var5, 5, "__weak var5");
0042     ASSERT_EQ(*lib->data.var6, 6, "extern var6");
0043     ASSERT_TRUE(*lib->kconfig.CONFIG_BPF_SYSCALL, "CONFIG_BPF_SYSCALL");
0044 
0045     test_subskeleton_lib__destroy(lib);
0046     return result;
0047 }
0048 
0049 void test_subskeleton(void)
0050 {
0051     int err, result;
0052     struct test_subskeleton *skel;
0053 
0054     skel = test_subskeleton__open();
0055     if (!ASSERT_OK_PTR(skel, "skel_open"))
0056         return;
0057 
0058     skel->rodata->rovar1 = 10;
0059     skel->rodata->var1 = 1;
0060     subskeleton_lib_setup(skel->obj);
0061 
0062     err = test_subskeleton__load(skel);
0063     if (!ASSERT_OK(err, "skel_load"))
0064         goto cleanup;
0065 
0066     err = test_subskeleton__attach(skel);
0067     if (!ASSERT_OK(err, "skel_attach"))
0068         goto cleanup;
0069 
0070     /* trigger tracepoint */
0071     usleep(1);
0072 
0073     result = subskeleton_lib_subresult(skel->obj) * 10;
0074     ASSERT_EQ(skel->bss->out1, result, "unexpected calculation");
0075 
0076 cleanup:
0077     test_subskeleton__destroy(skel);
0078 }