port: FreeBSD has no ENODATA, alias it to ENOATTR
[lttng-tools.git] / tests / regression / ust / ust-dl / prog.c
... / ...
CommitLineData
1/*
2 * Copyright (C) 2016 Antoine Busque <abusque@efficios.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 */
7
8/* _GNU_SOURCE is defined by config.h */
9#include <dlfcn.h>
10#include <stdio.h>
11#include <unistd.h>
12#include <stdlib.h>
13
14#include <common/compat/errno.h>
15
16/*
17 * libfoo has a direct dependency on libbar.
18 * libbar has a direct dependency on libzzz.
19 * This test is therefore a mix of dlopen/dlclose and dlmopen/dlclose of
20 * libfoo, and of its direct dependencies.
21 */
22int main(int argc, char **argv)
23{
24 void *h0, *h2, *h3, *h4;
25
26#ifdef HAVE_DLMOPEN
27 void *h1;
28#endif
29
30 char *error;
31 int (*foo)(void);
32
33 h0 = dlopen("libbar.so", RTLD_LAZY);
34 if (!h0) {
35 goto get_error;
36 }
37
38#ifdef HAVE_DLMOPEN
39 h1 = dlmopen(LM_ID_BASE, "libfoo.so", RTLD_LAZY);
40 if (!h1) {
41 goto get_error;
42 }
43#endif
44
45 h2 = dlopen("libzzz.so", RTLD_LAZY);
46 if (!h2) {
47 goto get_error;
48 }
49 h3 = dlopen("libfoo.so", RTLD_LAZY);
50 if (!h3) {
51 goto get_error;
52 }
53 h4 = dlopen("libfoo.so", RTLD_LAZY);
54 if (!h4) {
55 goto get_error;
56 }
57
58 foo = dlsym(h3, "foo");
59 error = dlerror();
60 if (error != NULL) {
61 goto error;
62 }
63
64 foo();
65
66 if (dlclose(h0)) {
67 goto get_error;
68 }
69
70#ifdef HAVE_DLMOPEN
71 if (dlclose(h1)) {
72 goto get_error;
73 }
74#endif
75
76 if (dlclose(h2)) {
77 goto get_error;
78 }
79 if (dlclose(h3)) {
80 goto get_error;
81 }
82 if (dlclose(h4)) {
83 goto get_error;
84 }
85
86 exit(EXIT_SUCCESS);
87
88get_error:
89 error = dlerror();
90error:
91 fprintf(stderr, "%s\n", error);
92 exit(EXIT_FAILURE);
93}
This page took 0.022794 seconds and 4 git commands to generate.