if (!ASSERT_OK_PTR(skel->links.uretprobe_sleep, "bpf_program__attach_uprobe_multi"))
                goto cleanup;
 
+       opts->retprobe = false;
+       skel->links.uprobe_extra = bpf_program__attach_uprobe_multi(skel->progs.uprobe_extra, -1,
+                                                                   binary, pattern, opts);
+       if (!ASSERT_OK_PTR(skel->links.uprobe_extra, "bpf_program__attach_uprobe_multi"))
+               goto cleanup;
+
        uprobe_multi_test_run(skel, child);
 
 cleanup:
                "uprobe_multi_func_2",
                "uprobe_multi_func_3",
        };
+       int link_extra_fd = -1;
        int err;
 
        err = elf_resolve_syms_offsets(path, 3, syms, (unsigned long **) &offsets);
        if (!ASSERT_GE(link4_fd, 0, "link4_fd"))
                goto cleanup;
 
+       opts.kprobe_multi.flags = 0;
+       opts.uprobe_multi.pid = 0;
+       prog_fd = bpf_program__fd(skel->progs.uprobe_extra);
+       link_extra_fd = bpf_link_create(prog_fd, 0, BPF_TRACE_UPROBE_MULTI, &opts);
+       if (!ASSERT_GE(link_extra_fd, 0, "link_extra_fd"))
+               goto cleanup;
+
        uprobe_multi_test_run(skel, child);
 
 cleanup:
                close(link3_fd);
        if (link4_fd >= 0)
                close(link4_fd);
+       if (link_extra_fd >= 0)
+               close(link_extra_fd);
 
        uprobe_multi__destroy(skel);
        free(offsets);