mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
Embed contents of BPF object file used for BPF skeleton generation inside skeleton itself. This allows to keep BPF object file and its skeleton in sync at all times, and simpifies skeleton instantiation. Also switch existing selftests to not require BPF_EMBED_OBJ anymore. Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Yonghong Song <yhs@fb.com> Link: https://lore.kernel.org/bpf/20191218052552.2915188-2-andriin@fb.com
65 lines
1.8 KiB
C
65 lines
1.8 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright (c) 2019 Facebook */
|
|
|
|
#include <test_progs.h>
|
|
|
|
struct s {
|
|
int a;
|
|
long long b;
|
|
} __attribute__((packed));
|
|
|
|
#include "test_skeleton.skel.h"
|
|
|
|
void test_skeleton(void)
|
|
{
|
|
int duration = 0, err;
|
|
struct test_skeleton* skel;
|
|
struct test_skeleton__bss *bss;
|
|
struct test_skeleton__externs *exts;
|
|
|
|
skel = test_skeleton__open();
|
|
if (CHECK(!skel, "skel_open", "failed to open skeleton\n"))
|
|
return;
|
|
|
|
printf("EXTERNS BEFORE: %p\n", skel->externs);
|
|
if (CHECK(skel->externs, "skel_externs", "externs are mmaped()!\n"))
|
|
goto cleanup;
|
|
|
|
err = test_skeleton__load(skel);
|
|
if (CHECK(err, "skel_load", "failed to load skeleton: %d\n", err))
|
|
goto cleanup;
|
|
printf("EXTERNS AFTER: %p\n", skel->externs);
|
|
|
|
bss = skel->bss;
|
|
bss->in1 = 1;
|
|
bss->in2 = 2;
|
|
bss->in3 = 3;
|
|
bss->in4 = 4;
|
|
bss->in5.a = 5;
|
|
bss->in5.b = 6;
|
|
exts = skel->externs;
|
|
|
|
err = test_skeleton__attach(skel);
|
|
if (CHECK(err, "skel_attach", "skeleton attach failed: %d\n", err))
|
|
goto cleanup;
|
|
|
|
/* trigger tracepoint */
|
|
usleep(1);
|
|
|
|
CHECK(bss->out1 != 1, "res1", "got %d != exp %d\n", bss->out1, 1);
|
|
CHECK(bss->out2 != 2, "res2", "got %lld != exp %d\n", bss->out2, 2);
|
|
CHECK(bss->out3 != 3, "res3", "got %d != exp %d\n", (int)bss->out3, 3);
|
|
CHECK(bss->out4 != 4, "res4", "got %lld != exp %d\n", bss->out4, 4);
|
|
CHECK(bss->handler_out5.a != 5, "res5", "got %d != exp %d\n",
|
|
bss->handler_out5.a, 5);
|
|
CHECK(bss->handler_out5.b != 6, "res6", "got %lld != exp %d\n",
|
|
bss->handler_out5.b, 6);
|
|
|
|
CHECK(bss->bpf_syscall != exts->CONFIG_BPF_SYSCALL, "ext1",
|
|
"got %d != exp %d\n", bss->bpf_syscall, exts->CONFIG_BPF_SYSCALL);
|
|
CHECK(bss->kern_ver != exts->LINUX_KERNEL_VERSION, "ext2",
|
|
"got %d != exp %d\n", bss->kern_ver, exts->LINUX_KERNEL_VERSION);
|
|
|
|
cleanup:
|
|
test_skeleton__destroy(skel);
|
|
}
|