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* _Nullable dli_fname; 40 /* Address at which shared object is loaded. */ 41 void* _Nullable dli_fbase; 42 /* Name of nearest symbol with address lower than addr. */ 43 const char* _Nullable dli_sname; 44 /* Exact address of symbol named in dli_sname. */ 45 void* _Nullable dli_saddr; 46 } Dl_info; 47 48 void* _Nullable dlopen(const char* _Nullable __filename, int __flag); 49 int dlclose(void* _Nonnull __handle); 50 char* _Nullable dlerror(void); 51 /* (RTLD_DEFAULT is null for LP64, but -1 for LP32) */ 52 void* _Nullable dlsym(void* __BIONIC_COMPLICATED_NULLNESS __handle, const char* _Nullable __symbol); 53 /* (RTLD_DEFAULT is null for LP64, but -1 for LP32) */ 54 void* _Nullable dlvsym(void* __BIONIC_COMPLICATED_NULLNESS __handle, const char* _Nullable __symbol, const char* _Nullable __version) __INTRODUCED_IN(24); 55 int dladdr(const void* _Nonnull __addr, Dl_info* _Nonnull __info); 56 57 #define RTLD_LOCAL 0 58 #define RTLD_LAZY 0x00001 59 #define RTLD_NOW 0x00002 60 #define RTLD_NOLOAD 0x00004 61 #define RTLD_GLOBAL 0x00100 62 #define RTLD_NODELETE 0x01000 63 64 #if !defined(__LP64__) 65 /* LP32 is broken for historical reasons. */ 66 #undef RTLD_NOW 67 #define RTLD_NOW 0x00000 68 #undef RTLD_GLOBAL 69 #define RTLD_GLOBAL 0x00002 70 #endif 71 72 #if defined (__LP64__) 73 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0) 74 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, -1L) 75 #else 76 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0xffffffff) 77 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, 0xfffffffe) 78 #endif 79 80 __END_DECLS 81 82 #endif 83