On Fri, Jun 30, 2023 at 1:37 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Adding uprobe_multi test program that defines 50k uprobe_multi_func_* > functions and will serve as attach point for uprobe_multi bench test > in following patch. > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > tools/testing/selftests/bpf/Makefile | 5 ++ > tools/testing/selftests/bpf/uprobe_multi.c | 53 ++++++++++++++++++++++ > 2 files changed, 58 insertions(+) > create mode 100644 tools/testing/selftests/bpf/uprobe_multi.c > > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile > index ad6b585e0d7c..acf7c9a29082 100644 > --- a/tools/testing/selftests/bpf/Makefile > +++ b/tools/testing/selftests/bpf/Makefile > @@ -567,6 +567,7 @@ TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ > $(OUTPUT)/liburandom_read.so \ > $(OUTPUT)/xdp_synproxy \ > $(OUTPUT)/sign-file \ > + $(OUTPUT)/uprobe_multi \ would adding all this to urandom_read be too bad in terms of size and performance? I'm just not sure we won't yet more custom binaries and rules in Makefile > ima_setup.sh \ > verify_sig_setup.sh \ > $(wildcard progs/btf_dump_test_case_*.c) \ > @@ -670,6 +671,10 @@ $(OUTPUT)/veristat: $(OUTPUT)/veristat.o > $(call msg,BINARY,,$@) > $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(filter %.a %.o,$^) $(LDLIBS) -o $@ > > +$(OUTPUT)/uprobe_multi: uprobe_multi.c > + $(call msg,BINARY,,$@) > + $(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ > + > EXTRA_CLEAN := $(TEST_CUSTOM_PROGS) $(SCRATCH_DIR) $(HOST_SCRATCH_DIR) \ > prog_tests/tests.h map_tests/tests.h verifier/tests.h \ > feature bpftool \ > diff --git a/tools/testing/selftests/bpf/uprobe_multi.c b/tools/testing/selftests/bpf/uprobe_multi.c > new file mode 100644 > index 000000000000..115a7f6cebfa > --- /dev/null > +++ b/tools/testing/selftests/bpf/uprobe_multi.c > @@ -0,0 +1,53 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +#include <stdio.h> > + > +#define __PASTE(a, b) a##b > +#define PASTE(a, b) __PASTE(a, b) > + > +#define NAME(name, idx) PASTE(name, idx) > + > +#define DEF(name, idx) int NAME(name, idx)(void) { return 0; } > +#define CALL(name, idx) NAME(name, idx)(); > + > +#define F(body, name, idx) body(name, idx) > + > +#define F10(body, name, idx) \ > + F(body, PASTE(name, idx), 0) F(body, PASTE(name, idx), 1) F(body, PASTE(name, idx), 2) \ > + F(body, PASTE(name, idx), 3) F(body, PASTE(name, idx), 4) F(body, PASTE(name, idx), 5) \ > + F(body, PASTE(name, idx), 6) F(body, PASTE(name, idx), 7) F(body, PASTE(name, idx), 8) \ > + F(body, PASTE(name, idx), 9) > + > +#define F100(body, name, idx) \ > + F10(body, PASTE(name, idx), 0) F10(body, PASTE(name, idx), 1) F10(body, PASTE(name, idx), 2) \ > + F10(body, PASTE(name, idx), 3) F10(body, PASTE(name, idx), 4) F10(body, PASTE(name, idx), 5) \ > + F10(body, PASTE(name, idx), 6) F10(body, PASTE(name, idx), 7) F10(body, PASTE(name, idx), 8) \ > + F10(body, PASTE(name, idx), 9) > + > +#define F1000(body, name, idx) \ > + F100(body, PASTE(name, idx), 0) F100(body, PASTE(name, idx), 1) F100(body, PASTE(name, idx), 2) \ > + F100(body, PASTE(name, idx), 3) F100(body, PASTE(name, idx), 4) F100(body, PASTE(name, idx), 5) \ > + F100(body, PASTE(name, idx), 6) F100(body, PASTE(name, idx), 7) F100(body, PASTE(name, idx), 8) \ > + F100(body, PASTE(name, idx), 9) > + > +#define F10000(body, name, idx) \ > + F1000(body, PASTE(name, idx), 0) F1000(body, PASTE(name, idx), 1) F1000(body, PASTE(name, idx), 2) \ > + F1000(body, PASTE(name, idx), 3) F1000(body, PASTE(name, idx), 4) F1000(body, PASTE(name, idx), 5) \ > + F1000(body, PASTE(name, idx), 6) F1000(body, PASTE(name, idx), 7) F1000(body, PASTE(name, idx), 8) \ > + F1000(body, PASTE(name, idx), 9) > + > +F10000(DEF, uprobe_multi_func_, 0) > +F10000(DEF, uprobe_multi_func_, 1) > +F10000(DEF, uprobe_multi_func_, 2) > +F10000(DEF, uprobe_multi_func_, 3) > +F10000(DEF, uprobe_multi_func_, 4) > + > +int main(void) > +{ > + F10000(CALL, uprobe_multi_func_, 0) > + F10000(CALL, uprobe_multi_func_, 1) > + F10000(CALL, uprobe_multi_func_, 2) > + F10000(CALL, uprobe_multi_func_, 3) > + F10000(CALL, uprobe_multi_func_, 4) > + return 0; > +} > -- > 2.41.0 >