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 void* dlvsym(void* __handle, const char* __symbol, const char* __version) __INTRODUCED_IN(24); 53 int dladdr(const void* __addr, Dl_info* __info); 54 55 #define RTLD_LOCAL 0 56 #define RTLD_LAZY 0x00001 57 #define RTLD_NOW 0x00002 58 #define RTLD_NOLOAD 0x00004 59 #define RTLD_GLOBAL 0x00100 60 #define RTLD_NODELETE 0x01000 61 62 #if !defined(__LP64__) 63 /* LP32 is broken for historical reasons. */ 64 #undef RTLD_NOW 65 #define RTLD_NOW 0x00000 66 #undef RTLD_GLOBAL 67 #define RTLD_GLOBAL 0x00002 68 #endif 69 70 #if defined (__LP64__) 71 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0) 72 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, -1L) 73 #else 74 #define RTLD_DEFAULT __BIONIC_CAST(reinterpret_cast, void*, 0xffffffff) 75 #define RTLD_NEXT __BIONIC_CAST(reinterpret_cast, void*, 0xfffffffe) 76 #endif 77 78 __END_DECLS 79 80 #endif 81