@@ -74,11 +74,20 @@ static void test_stacktrace_ips_kprobe_multi(bool retprobe)
7474
7575 load_kallsyms ();
7676
77- check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 4 ,
78- ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
79- ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
80- ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
81- ksym_get_addr ("bpf_testmod_test_read" ));
77+ if (retprobe ) {
78+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 4 ,
79+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
80+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
81+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
82+ ksym_get_addr ("bpf_testmod_test_read" ));
83+ } else {
84+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 5 ,
85+ ksym_get_addr ("bpf_testmod_stacktrace_test" ),
86+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
87+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
88+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
89+ ksym_get_addr ("bpf_testmod_test_read" ));
90+ }
8291
8392cleanup :
8493 stacktrace_ips__destroy (skel );
@@ -128,6 +137,99 @@ static void test_stacktrace_ips_raw_tp(void)
128137 stacktrace_ips__destroy (skel );
129138}
130139
140+ static void test_stacktrace_ips_kprobe (bool retprobe )
141+ {
142+ LIBBPF_OPTS (bpf_kprobe_opts , opts ,
143+ .retprobe = retprobe
144+ );
145+ LIBBPF_OPTS (bpf_test_run_opts , topts );
146+ struct stacktrace_ips * skel ;
147+
148+ skel = stacktrace_ips__open_and_load ();
149+ if (!ASSERT_OK_PTR (skel , "stacktrace_ips__open_and_load" ))
150+ return ;
151+
152+ if (!skel -> kconfig -> CONFIG_UNWINDER_ORC ) {
153+ test__skip ();
154+ goto cleanup ;
155+ }
156+
157+ skel -> links .kprobe_test = bpf_program__attach_kprobe_opts (
158+ skel -> progs .kprobe_test ,
159+ "bpf_testmod_stacktrace_test" , & opts );
160+ if (!ASSERT_OK_PTR (skel -> links .kprobe_test , "bpf_program__attach_kprobe_opts" ))
161+ goto cleanup ;
162+
163+ trigger_module_test_read (1 );
164+
165+ load_kallsyms ();
166+
167+ if (retprobe ) {
168+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 4 ,
169+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
170+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
171+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
172+ ksym_get_addr ("bpf_testmod_test_read" ));
173+ } else {
174+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 5 ,
175+ ksym_get_addr ("bpf_testmod_stacktrace_test" ),
176+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
177+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
178+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
179+ ksym_get_addr ("bpf_testmod_test_read" ));
180+ }
181+
182+ cleanup :
183+ stacktrace_ips__destroy (skel );
184+ }
185+
186+ static void test_stacktrace_ips_trampoline (bool retprobe )
187+ {
188+ LIBBPF_OPTS (bpf_test_run_opts , topts );
189+ struct stacktrace_ips * skel ;
190+
191+ skel = stacktrace_ips__open_and_load ();
192+ if (!ASSERT_OK_PTR (skel , "stacktrace_ips__open_and_load" ))
193+ return ;
194+
195+ if (!skel -> kconfig -> CONFIG_UNWINDER_ORC ) {
196+ test__skip ();
197+ goto cleanup ;
198+ }
199+
200+ if (retprobe ) {
201+ skel -> links .fexit_test = bpf_program__attach_trace (skel -> progs .fexit_test );
202+ if (!ASSERT_OK_PTR (skel -> links .fexit_test , "bpf_program__attach_trace" ))
203+ goto cleanup ;
204+ } else {
205+ skel -> links .fentry_test = bpf_program__attach_trace (skel -> progs .fentry_test );
206+ if (!ASSERT_OK_PTR (skel -> links .fentry_test , "bpf_program__attach_trace" ))
207+ goto cleanup ;
208+ }
209+
210+ trigger_module_test_read (1 );
211+
212+ load_kallsyms ();
213+
214+ if (retprobe ) {
215+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 4 ,
216+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
217+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
218+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
219+ ksym_get_addr ("bpf_testmod_test_read" ));
220+ } else {
221+ check_stacktrace_ips (bpf_map__fd (skel -> maps .stackmap ), skel -> bss -> stack_key , 5 ,
222+ ksym_get_addr ("bpf_testmod_stacktrace_test" ),
223+ ksym_get_addr ("bpf_testmod_stacktrace_test_3" ),
224+ ksym_get_addr ("bpf_testmod_stacktrace_test_2" ),
225+ ksym_get_addr ("bpf_testmod_stacktrace_test_1" ),
226+ ksym_get_addr ("bpf_testmod_test_read" ));
227+ }
228+
229+ cleanup :
230+ stacktrace_ips__destroy (skel );
231+ }
232+
131233static void __test_stacktrace_ips (void )
132234{
133235 if (test__start_subtest ("kprobe_multi" ))
@@ -136,6 +238,14 @@ static void __test_stacktrace_ips(void)
136238 test_stacktrace_ips_kprobe_multi (true);
137239 if (test__start_subtest ("raw_tp" ))
138240 test_stacktrace_ips_raw_tp ();
241+ if (test__start_subtest ("kprobe" ))
242+ test_stacktrace_ips_kprobe (false);
243+ if (test__start_subtest ("kretprobe" ))
244+ test_stacktrace_ips_kprobe (true);
245+ if (test__start_subtest ("fentry" ))
246+ test_stacktrace_ips_trampoline (false);
247+ if (test__start_subtest ("fexit" ))
248+ test_stacktrace_ips_trampoline (true);
139249}
140250#else
141251static void __test_stacktrace_ips (void )
0 commit comments