-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/bpf: Add test validating data section to struct convertion …
…layout Add a simple selftests validating datasection-to-struct layour dumping. Global variables are constructed in such a way as to cause both natural and artificial padding (through custom alignment requirement). Signed-off-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20191214014341.3442258-17-andriin@fb.com
- Loading branch information
Andrii Nakryiko
authored and
Alexei Starovoitov
committed
Dec 15, 2019
1 parent
dde53c1
commit 197448e
Showing
2 changed files
with
88 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
// 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" | ||
|
||
BPF_EMBED_OBJ(skeleton, "test_skeleton.o"); | ||
|
||
void test_skeleton(void) | ||
{ | ||
int duration = 0, err; | ||
struct test_skeleton* skel; | ||
struct test_skeleton__bss *bss; | ||
|
||
skel = test_skeleton__open_and_load(&skeleton_embed); | ||
if (CHECK(!skel, "skel_open", "failed to open skeleton\n")) | ||
return; | ||
|
||
bss = skel->bss; | ||
bss->in1 = 1; | ||
bss->in2 = 2; | ||
bss->in3 = 3; | ||
bss->in4 = 4; | ||
bss->in5.a = 5; | ||
bss->in5.b = 6; | ||
|
||
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); | ||
|
||
cleanup: | ||
test_skeleton__destroy(skel); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* Copyright (c) 2019 Facebook */ | ||
|
||
#include <linux/bpf.h> | ||
#include "bpf_helpers.h" | ||
|
||
struct s { | ||
int a; | ||
long long b; | ||
} __attribute__((packed)); | ||
|
||
int in1 = 0; | ||
long long in2 = 0; | ||
char in3 = '\0'; | ||
long long in4 __attribute__((aligned(64))) = 0; | ||
struct s in5 = {}; | ||
|
||
long long out2 = 0; | ||
char out3 = 0; | ||
long long out4 = 0; | ||
int out1 = 0; | ||
|
||
|
||
SEC("raw_tp/sys_enter") | ||
int handler(const void *ctx) | ||
{ | ||
static volatile struct s out5; | ||
|
||
out1 = in1; | ||
out2 = in2; | ||
out3 = in3; | ||
out4 = in4; | ||
out5 = in5; | ||
return 0; | ||
} | ||
|
||
char _license[] SEC("license") = "GPL"; |