Thread (76 messages) flat view 76 messages, 6 authors, 2021-07-07

Re: [PATCH 16/19] selftests/bpf: Add fentry multi func test

From: Jiri Olsa <hidden>
Date: 2021-06-09 14:29:28
Also in: bpf

On Tue, Jun 08, 2021 at 10:40:24PM -0700, Andrii Nakryiko wrote:
On Sat, Jun 5, 2021 at 4:12 AM Jiri Olsa [off-list ref] wrote:
quoted
Adding selftest for fentry multi func test that attaches
to bpf_fentry_test* functions and checks argument values
based on the processed function.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/testing/selftests/bpf/multi_check.h     | 52 +++++++++++++++++++
 .../bpf/prog_tests/fentry_multi_test.c        | 43 +++++++++++++++
 .../selftests/bpf/progs/fentry_multi_test.c   | 18 +++++++
 3 files changed, 113 insertions(+)
 create mode 100644 tools/testing/selftests/bpf/multi_check.h
 create mode 100644 tools/testing/selftests/bpf/prog_tests/fentry_multi_test.c
 create mode 100644 tools/testing/selftests/bpf/progs/fentry_multi_test.c
diff --git a/tools/testing/selftests/bpf/multi_check.h b/tools/testing/selftests/bpf/multi_check.h
new file mode 100644
index 000000000000..36c2a93f9be3
--- /dev/null
+++ b/tools/testing/selftests/bpf/multi_check.h
we have a proper static linking now, we don't have to use header
inclusion hacks, let's do this properly?
ok, will change
quoted
@@ -0,0 +1,52 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __MULTI_CHECK_H
+#define __MULTI_CHECK_H
+
+extern unsigned long long bpf_fentry_test[8];
+
+static __attribute__((unused)) inline
+void multi_arg_check(unsigned long ip, __u64 a, __u64 b, __u64 c, __u64 d, __u64 e, __u64 f, __u64 *test_result)
+{
+       if (ip == bpf_fentry_test[0]) {
+               *test_result += (int) a == 1;
+       } else if (ip == bpf_fentry_test[1]) {
+               *test_result += (int) a == 2 && (__u64) b == 3;
+       } else if (ip == bpf_fentry_test[2]) {
+               *test_result += (char) a == 4 && (int) b == 5 && (__u64) c == 6;
+       } else if (ip == bpf_fentry_test[3]) {
+               *test_result += (void *) a == (void *) 7 && (char) b == 8 && (int) c == 9 && (__u64) d == 10;
+       } else if (ip == bpf_fentry_test[4]) {
+               *test_result += (__u64) a == 11 && (void *) b == (void *) 12 && (short) c == 13 && (int) d == 14 && (__u64) e == 15;
+       } else if (ip == bpf_fentry_test[5]) {
+               *test_result += (__u64) a == 16 && (void *) b == (void *) 17 && (short) c == 18 && (int) d == 19 && (void *) e == (void *) 20 && (__u64) f == 21;
+       } else if (ip == bpf_fentry_test[6]) {
+               *test_result += 1;
+       } else if (ip == bpf_fentry_test[7]) {
+               *test_result += 1;
+       }
why not use switch? and why the casting?
hum, for switch I'd need constants right? 

casting is extra ;-) wanted to check the actual argument types,
but probably makes no sense

will check
quoted
+}
+
[...]
quoted
diff --git a/tools/testing/selftests/bpf/progs/fentry_multi_test.c b/tools/testing/selftests/bpf/progs/fentry_multi_test.c
new file mode 100644
index 000000000000..a443fc958e5a
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/fentry_multi_test.c
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include "multi_check.h"
+
+char _license[] SEC("license") = "GPL";
+
+unsigned long long bpf_fentry_test[8];
+
+__u64 test_result = 0;
+
+SEC("fentry.multi/bpf_fentry_test*")
wait, that's a regexp syntax that libc supports?.. Not .*? We should
definitely not provide btf__find_by_pattern_kind() API, I'd like to
avoid explaining what flavors of regexps libbpf supports.
ok

thanks,
jirka
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help