1*f2644fb4SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0
2*f2644fb4SAndrii Nakryiko /* Copyright (c) 2021 Facebook */
3*f2644fb4SAndrii Nakryiko 
4*f2644fb4SAndrii Nakryiko #include <test_progs.h>
5*f2644fb4SAndrii Nakryiko #include <sys/syscall.h>
6*f2644fb4SAndrii Nakryiko #include "linked_funcs.skel.h"
7*f2644fb4SAndrii Nakryiko 
8*f2644fb4SAndrii Nakryiko void test_linked_funcs(void)
9*f2644fb4SAndrii Nakryiko {
10*f2644fb4SAndrii Nakryiko 	int err;
11*f2644fb4SAndrii Nakryiko 	struct linked_funcs *skel;
12*f2644fb4SAndrii Nakryiko 
13*f2644fb4SAndrii Nakryiko 	skel = linked_funcs__open();
14*f2644fb4SAndrii Nakryiko 	if (!ASSERT_OK_PTR(skel, "skel_open"))
15*f2644fb4SAndrii Nakryiko 		return;
16*f2644fb4SAndrii Nakryiko 
17*f2644fb4SAndrii Nakryiko 	skel->rodata->my_tid = syscall(SYS_gettid);
18*f2644fb4SAndrii Nakryiko 	skel->bss->syscall_id = SYS_getpgid;
19*f2644fb4SAndrii Nakryiko 
20*f2644fb4SAndrii Nakryiko 	err = linked_funcs__load(skel);
21*f2644fb4SAndrii Nakryiko 	if (!ASSERT_OK(err, "skel_load"))
22*f2644fb4SAndrii Nakryiko 		goto cleanup;
23*f2644fb4SAndrii Nakryiko 
24*f2644fb4SAndrii Nakryiko 	err = linked_funcs__attach(skel);
25*f2644fb4SAndrii Nakryiko 	if (!ASSERT_OK(err, "skel_attach"))
26*f2644fb4SAndrii Nakryiko 		goto cleanup;
27*f2644fb4SAndrii Nakryiko 
28*f2644fb4SAndrii Nakryiko 	/* trigger */
29*f2644fb4SAndrii Nakryiko 	syscall(SYS_getpgid);
30*f2644fb4SAndrii Nakryiko 
31*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_val1, 2000 + 2000, "output_val1");
32*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_ctx1, SYS_getpgid, "output_ctx1");
33*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_weak1, 42, "output_weak1");
34*f2644fb4SAndrii Nakryiko 
35*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_val2, 2 * 1000 + 2 * (2 * 1000), "output_val2");
36*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_ctx2, SYS_getpgid, "output_ctx2");
37*f2644fb4SAndrii Nakryiko 	/* output_weak2 should never be updated */
38*f2644fb4SAndrii Nakryiko 	ASSERT_EQ(skel->bss->output_weak2, 0, "output_weak2");
39*f2644fb4SAndrii Nakryiko 
40*f2644fb4SAndrii Nakryiko cleanup:
41*f2644fb4SAndrii Nakryiko 	linked_funcs__destroy(skel);
42*f2644fb4SAndrii Nakryiko }
43