]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests/bpf: add test of __weak unknown virtual __kconfig extern
authorAndrii Nakryiko <andrii@kernel.org>
Thu, 14 Jul 2022 07:07:52 +0000 (00:07 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 19 Jul 2022 16:33:18 +0000 (09:33 -0700)
Exercise libbpf's logic for unknown __weak virtual __kconfig externs.
USDT selftests are already excercising non-weak known virtual extern
already (LINUX_HAS_BPF_COOKIE), so no need to add explicit tests for it.

Tested-by: Alan Maguire <alan.maguire@oracle.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20220714070755.3235561-3-andrii@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/prog_tests/core_extern.c
tools/testing/selftests/bpf/progs/test_core_extern.c

index 1931a158510e01952c613050ac539039d6d4d2ba..63a51e9f3630f83c8ec5c94bd76ed59c69a44e6b 100644 (file)
@@ -39,6 +39,7 @@ static struct test_case {
                       "CONFIG_STR=\"abracad\"\n"
                       "CONFIG_MISSING=0",
                .data = {
+                       .unkn_virt_val = 0,
                        .bpf_syscall = false,
                        .tristate_val = TRI_MODULE,
                        .bool_val = true,
@@ -121,7 +122,7 @@ static struct test_case {
 void test_core_extern(void)
 {
        const uint32_t kern_ver = get_kernel_version();
-       int err, duration = 0, i, j;
+       int err, i, j;
        struct test_core_extern *skel = NULL;
        uint64_t *got, *exp;
        int n = sizeof(*skel->data) / sizeof(uint64_t);
@@ -136,19 +137,17 @@ void test_core_extern(void)
                        continue;
 
                skel = test_core_extern__open_opts(&opts);
-               if (CHECK(!skel, "skel_open", "skeleton open failed\n"))
+               if (!ASSERT_OK_PTR(skel, "skel_open"))
                        goto cleanup;
                err = test_core_extern__load(skel);
                if (t->fails) {
-                       CHECK(!err, "skel_load",
-                             "shouldn't succeed open/load of skeleton\n");
+                       ASSERT_ERR(err, "skel_load_should_fail");
                        goto cleanup;
-               } else if (CHECK(err, "skel_load",
-                                "failed to open/load skeleton\n")) {
+               } else if (!ASSERT_OK(err, "skel_load")) {
                        goto cleanup;
                }
                err = test_core_extern__attach(skel);
-               if (CHECK(err, "attach_raw_tp", "failed attach: %d\n", err))
+               if (!ASSERT_OK(err, "attach_raw_tp"))
                        goto cleanup;
 
                usleep(1);
@@ -158,9 +157,7 @@ void test_core_extern(void)
                got = (uint64_t *)skel->data;
                exp = (uint64_t *)&t->data;
                for (j = 0; j < n; j++) {
-                       CHECK(got[j] != exp[j], "check_res",
-                             "result #%d: expected %llx, but got %llx\n",
-                              j, (__u64)exp[j], (__u64)got[j]);
+                       ASSERT_EQ(got[j], exp[j], "result");
                }
 cleanup:
                test_core_extern__destroy(skel);
index 3ac3603ad53d3fe3e6fbbc8d76023e5dd4b0ec63..a3c7c1042f354ef2605b3cec8cf0a797d8e71d0e 100644 (file)
@@ -11,6 +11,7 @@
 static int (*bpf_missing_helper)(const void *arg1, int arg2) = (void *) 999;
 
 extern int LINUX_KERNEL_VERSION __kconfig;
+extern int LINUX_UNKNOWN_VIRTUAL_EXTERN __kconfig __weak;
 extern bool CONFIG_BPF_SYSCALL __kconfig; /* strong */
 extern enum libbpf_tristate CONFIG_TRISTATE __kconfig __weak;
 extern bool CONFIG_BOOL __kconfig __weak;
@@ -22,6 +23,7 @@ extern const char CONFIG_STR[8] __kconfig __weak;
 extern uint64_t CONFIG_MISSING __kconfig __weak;
 
 uint64_t kern_ver = -1;
+uint64_t unkn_virt_val = -1;
 uint64_t bpf_syscall = -1;
 uint64_t tristate_val = -1;
 uint64_t bool_val = -1;
@@ -38,6 +40,7 @@ int handle_sys_enter(struct pt_regs *ctx)
        int i;
 
        kern_ver = LINUX_KERNEL_VERSION;
+       unkn_virt_val = LINUX_UNKNOWN_VIRTUAL_EXTERN;
        bpf_syscall = CONFIG_BPF_SYSCALL;
        tristate_val = CONFIG_TRISTATE;
        bool_val = CONFIG_BOOL;