1 /* 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 */ 28 29 #ifndef __DLFCN_H__ 30 #define __DLFCN_H__ 31 32 #include <stdint.h> 33 #include <sys/cdefs.h> 34 35 __BEGIN_DECLS 36 37 typedef struct { 38 /* Pathname of shared object that contains address. */ 39 const char* dli_fname; 40 /* Address at which shared object is loaded. */ 41 void* dli_fbase; 42 /* Name of nearest symbol with address lower than addr. */ 43 const char* dli_sname; 44 /* Exact address of symbol named in dli_sname. */ 45 void* dli_saddr; 46 } Dl_info; 47 48 void* dlopen(const char* __filename, int __flag); 49 int dlclose(void* __handle); 50 char* dlerror(void); 51 void* dlsym(void* __handle, const char* __symbol); 52 53 #if __ANDROID_API__ >= 24 54 void* dlvsym(void* __handle, const char* __symbol, const char* __version) __INTRODUCED_IN(24); 55 #endif /* __ANDROID_API__ >= 24 */ 56 57 int dladdr(const void* __addr, Dl_info* __info); 58 59 #define RTLD_LOCAL 0 60 #define RTLD_LAZY 0x00001 61 #define RTLD_NOW 0x00002 62 #define RTLD_NOLOAD 0x00004 63 #define RTLD_GLOBAL 0x00100 64 #define RTLD_NODELETE 0x01000 65 66 #if !defined(__LP64__) 67 /* LP32 is broken for historical reasons. */ 68 #undef RTLD_NOW 69 #define RTLD_NOW 0x00000 70 #undef RTLD_GLOBAL 71 #define RTLD_GLOBAL 0x00002 72 #endif 73 74 #if defined (__LP64__) 75 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0) 76 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, -1L) 77 #else 78 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0xffffffff) 79 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, 0xfffffffe) 80 #endif 81 82 __END_DECLS 83 84 #endif 85