blob: a53f664f257f83e3217fe9771fcb4c39f04e5f3b [file] [log] [blame]
The Android Open Source Project1dc9e472009-03-03 19:28:35 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in
12 * the documentation and/or other materials provided with the
13 * distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
Elliott Hughes5470c182016-07-22 11:36:17 -070028
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080029#ifndef __DLFCN_H__
30#define __DLFCN_H__
31
32#include <sys/cdefs.h>
33
34__BEGIN_DECLS
35
Elliott Hughes5470c182016-07-22 11:36:17 -070036#if defined(__clang__)
37#pragma clang diagnostic push
38#pragma clang diagnostic ignored "-Wnullability-completeness"
39#endif
40
Matt Fischere2a8b1f2009-12-31 12:17:40 -060041typedef struct {
Elliott Hughes5470c182016-07-22 11:36:17 -070042 /* Pathname of shared object that contains address. */
43 const char* dli_fname;
44 /* Address at which shared object is loaded. */
45 void* dli_fbase;
46 /* Name of nearest symbol with address lower than addr. */
47 const char* dli_sname;
48 /* Exact address of symbol named in dli_sname. */
49 void* dli_saddr;
Matt Fischere2a8b1f2009-12-31 12:17:40 -060050} Dl_info;
51
Elliott Hughes5470c182016-07-22 11:36:17 -070052void* dlopen(const char* filename, int flag);
53int dlclose(void* _Nonnull handle);
54const char* dlerror(void);
55void* dlsym(void* handle, const char* _Nonnull symbol);
56void* dlvsym(void* handle, const char* _Nonnull symbol, const char* _Nonnull version) __INTRODUCED_IN(24);
57int dladdr(const void* addr, Dl_info* _Nonnull info);
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080058
59enum {
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070060#if defined(__LP64__)
61 RTLD_NOW = 2,
62#else
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080063 RTLD_NOW = 0,
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070064#endif
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080065 RTLD_LAZY = 1,
66
67 RTLD_LOCAL = 0,
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070068#if defined(__LP64__)
69 RTLD_GLOBAL = 0x00100,
70#else
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080071 RTLD_GLOBAL = 2,
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070072#endif
73 RTLD_NOLOAD = 4,
Dmitriy Ivanov7ca96a02014-11-04 09:37:28 -080074 RTLD_NODELETE = 0x01000,
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080075};
76
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070077#if defined (__LP64__)
Elliott Hughes5470c182016-07-22 11:36:17 -070078#define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0)
79#define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, -1L)
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070080#else
Elliott Hughes5470c182016-07-22 11:36:17 -070081#define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0xffffffff)
82#define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, 0xfffffffe)
83#endif
84
85#if defined(__clang__)
86#pragma clang diagnostic pop
Dmitriy Ivanovb648a8a2014-05-19 15:06:58 -070087#endif
The Android Open Source Project1dc9e472009-03-03 19:28:35 -080088
89__END_DECLS
90
91#endif /* __DLFCN_H */