Move to kernel style SPDX license identifiers
[lttng-ust.git] / include / lttng / ust-dlfcn.h
... / ...
CommitLineData
1/*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
5 *
6 * dlfcn.h compatibility layer.
7 */
8
9#ifndef _LTTNG_UST_DLFCN_H
10#define _LTTNG_UST_DLFCN_H
11
12#ifdef _DLFCN_H
13#error "Please include lttng/ust-dlfcn.h before dlfcn.h."
14#endif /* _DLFCN_H */
15
16#ifdef __GLIBC__
17/*
18 * glibc declares dlsym() and dlerror() with __attribute__((leaf)) (see
19 * THROW annotation). Unfortunately, this is not in sync with reality,
20 * as those functions call the memory allocator. Work-around this glibc
21 * bug by declaring our own symbols.
22 *
23 * There has been a similar issue for dlopen() and dlclose(), as
24 * constructors and destructors are called from these functions, so they
25 * are clearly non-leaf. Work-around the issue for those too for older
26 * glibc where these have not been fixed.
27 */
28#define dlopen glibc_dlopen_proto_lies_about_leafness
29#define dlclose glibc_dlclose_proto_lies_about_leafness
30#define dlsym glibc_dlsym_proto_lies_about_leafness
31#define dlerror glibc_dlerror_proto_lies_about_leafness
32#define dlmopen glibc_dlmopen_proto_lies_about_leafness
33#define dlvsym glibc_dlvsym_proto_lies_about_leafness
34#include <dlfcn.h>
35#undef dlvsym
36#undef dlmopen
37#undef dlerror
38#undef dlsym
39#undef dlclose
40#undef dlopen
41
42extern void *dlopen(__const char *__file, int __mode);
43extern int dlclose(void *__handle) __nonnull ((1));
44extern void *dlsym(void *__restrict __handle,
45 __const char *__restrict __name) __nonnull ((2));
46extern char *dlerror(void);
47#ifdef __USE_GNU
48extern void *dlmopen(Lmid_t __nsid, const char *__file, int __mode);
49extern void *dlvsym(void *__restrict __handle,
50 __const char *__restrict __name,
51 __const char *__restrict __version);
52#endif
53#else
54#include <dlfcn.h>
55#endif /* __GLIBC__ */
56
57#endif /* _LTTNG_UST_DLFCN_H */
This page took 0.022546 seconds and 4 git commands to generate.