forked from Minki/linux
selftests/bpf: add test of __weak unknown virtual __kconfig extern
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>
This commit is contained in:
parent
55d00c37eb
commit
ce6dc74a0a
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user