summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/fentry_test.c
diff options
context:
space:
mode:
authorMartin KaFai Lau <kafai@fb.com>2019-11-23 12:25:04 -0800
committerAlexei Starovoitov <ast@kernel.org>2019-11-24 17:12:11 -0800
commitf9a7cf6eb17cd0110c8c47d9e7969fc2716e5772 (patch)
tree9db74c8c6aaa198f2d163d066abe228f24bb22d5 /tools/testing/selftests/bpf/progs/fentry_test.c
parentb8cd76ca4ae34731d47cd6a876d912a08efcc240 (diff)
bpf: Introduce BPF_TRACE_x helper for the tracing tests
For BPF_PROG_TYPE_TRACING, the bpf_prog's ctx is an array of u64. This patch borrows the idea from BPF_CALL_x in filter.h to convert a u64 to the arg type of the traced function. The new BPF_TRACE_x has an arg to specify the return type of a bpf_prog. It will be used in the future TCP-ops bpf_prog that may return "void". The new macros are defined in the new header file "bpf_trace_helpers.h". It is under selftests/bpf/ for now. It could be moved to libbpf later after seeing more upcoming non-tracing use cases. The tests are changed to use these new macros also. Hence, the k[s]u8/16/32/64 are no longer needed and they are removed from the bpf_helpers.h. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20191123202504.1502696-1-kafai@fb.com
Diffstat (limited to 'tools/testing/selftests/bpf/progs/fentry_test.c')
-rw-r--r--tools/testing/selftests/bpf/progs/fentry_test.c72
1 files changed, 18 insertions, 54 deletions
diff --git a/tools/testing/selftests/bpf/progs/fentry_test.c b/tools/testing/selftests/bpf/progs/fentry_test.c
index 545788bf8d50..d2af9f039df5 100644
--- a/tools/testing/selftests/bpf/progs/fentry_test.c
+++ b/tools/testing/selftests/bpf/progs/fentry_test.c
@@ -2,89 +2,53 @@
/* Copyright (c) 2019 Facebook */
#include <linux/bpf.h>
#include "bpf_helpers.h"
+#include "bpf_trace_helpers.h"
char _license[] SEC("license") = "GPL";
-struct test1 {
- ks32 a;
-};
static volatile __u64 test1_result;
-SEC("fentry/bpf_fentry_test1")
-int test1(struct test1 *ctx)
+BPF_TRACE_1("fentry/bpf_fentry_test1", test1, int, a)
{
- test1_result = ctx->a == 1;
+ test1_result = a == 1;
return 0;
}
-struct test2 {
- ks32 a;
- ku64 b;
-};
static volatile __u64 test2_result;
-SEC("fentry/bpf_fentry_test2")
-int test2(struct test2 *ctx)
+BPF_TRACE_2("fentry/bpf_fentry_test2", test2, int, a, __u64, b)
{
- test2_result = ctx->a == 2 && ctx->b == 3;
+ test2_result = a == 2 && b == 3;
return 0;
}
-struct test3 {
- ks8 a;
- ks32 b;
- ku64 c;
-};
static volatile __u64 test3_result;
-SEC("fentry/bpf_fentry_test3")
-int test3(struct test3 *ctx)
+BPF_TRACE_3("fentry/bpf_fentry_test3", test3, char, a, int, b, __u64, c)
{
- test3_result = ctx->a == 4 && ctx->b == 5 && ctx->c == 6;
+ test3_result = a == 4 && b == 5 && c == 6;
return 0;
}
-struct test4 {
- void *a;
- ks8 b;
- ks32 c;
- ku64 d;
-};
static volatile __u64 test4_result;
-SEC("fentry/bpf_fentry_test4")
-int test4(struct test4 *ctx)
+BPF_TRACE_4("fentry/bpf_fentry_test4", test4,
+ void *, a, char, b, int, c, __u64, d)
{
- test4_result = ctx->a == (void *)7 && ctx->b == 8 && ctx->c == 9 &&
- ctx->d == 10;
+ test4_result = a == (void *)7 && b == 8 && c == 9 && d == 10;
return 0;
}
-struct test5 {
- ku64 a;
- void *b;
- ks16 c;
- ks32 d;
- ku64 e;
-};
static volatile __u64 test5_result;
-SEC("fentry/bpf_fentry_test5")
-int test5(struct test5 *ctx)
+BPF_TRACE_5("fentry/bpf_fentry_test5", test5,
+ __u64, a, void *, b, short, c, int, d, __u64, e)
{
- test5_result = ctx->a == 11 && ctx->b == (void *)12 && ctx->c == 13 &&
- ctx->d == 14 && ctx->e == 15;
+ test5_result = a == 11 && b == (void *)12 && c == 13 && d == 14 &&
+ e == 15;
return 0;
}
-struct test6 {
- ku64 a;
- void *b;
- ks16 c;
- ks32 d;
- void *e;
- ks64 f;
-};
static volatile __u64 test6_result;
-SEC("fentry/bpf_fentry_test6")
-int test6(struct test6 *ctx)
+BPF_TRACE_6("fentry/bpf_fentry_test6", test6,
+ __u64, a, void *, b, short, c, int, d, void *, e, __u64, f)
{
- test6_result = ctx->a == 16 && ctx->b == (void *)17 && ctx->c == 18 &&
- ctx->d == 19 && ctx->e == (void *)20 && ctx->f == 21;
+ test6_result = a == 16 && b == (void *)17 && c == 18 && d == 19 &&
+ e == (void *)20 && f == 21;
return 0;
}