[PATCH 08/10] selftests/bpf: Provide weak definitions for cross-test uprobe functions

Ricardo B. Marlière posted 10 patches 4 hours ago
[PATCH 08/10] selftests/bpf: Provide weak definitions for cross-test uprobe functions
Posted by Ricardo B. Marlière 4 hours ago
bpf_cookie.c references uprobe_multi_func_{1,2,3}() which are defined in
uprobe_multi_test.c. When uprobe_multi_test.c is not compiled (e.g. because
its BPF skeleton could not be generated), the link step fails with
undefined reference errors.

Replace the forward declarations with weak noinline stub definitions. The
linker will prefer the strong definitions from uprobe_multi_test.o when
that object is present, and fall back to the stubs otherwise.

Signed-off-by: Ricardo B. Marlière <rbm@suse.com>
---
 tools/testing/selftests/bpf/prog_tests/bpf_cookie.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
index 35adc3f6d443..a1503e8e07c8 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c
@@ -252,10 +252,13 @@ static void kprobe_multi_attach_api_subtest(void)
 	kprobe_multi__destroy(skel);
 }
 
-/* defined in prog_tests/uprobe_multi_test.c */
-void uprobe_multi_func_1(void);
-void uprobe_multi_func_2(void);
-void uprobe_multi_func_3(void);
+/*
+ * Weak stubs; the noinline definitions in uprobe_multi_test.c take
+ * precedence when that translation unit is compiled and linked.
+ */
+noinline __weak void uprobe_multi_func_1(void) {}
+noinline __weak void uprobe_multi_func_2(void) {}
+noinline __weak void uprobe_multi_func_3(void) {}
 
 static void uprobe_multi_test_run(struct uprobe_multi *skel)
 {

-- 
2.53.0