@@ -183,6 +183,53 @@ static void test_stacktrace_ips_kprobe(bool retprobe)
183183 stacktrace_ips__destroy (skel );
184184}
185185
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+
186233static void __test_stacktrace_ips (void )
187234{
188235 if (test__start_subtest ("kprobe_multi" ))
@@ -195,6 +242,10 @@ static void __test_stacktrace_ips(void)
195242 test_stacktrace_ips_kprobe (false);
196243 if (test__start_subtest ("kretprobe" ))
197244 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);
198249}
199250#else
200251static void __test_stacktrace_ips (void )
0 commit comments