123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- #ifndef _LINK_H
- #define _LINK_H 1
- #include <features.h>
- #include <elf.h>
- #ifdef __HAVE_SHARED__
- #include <dlfcn.h>
- #endif
- #include <sys/types.h>
- #if defined _LIBC && defined __UCLIBC_HAS_TLS__
- #include <tls.h>
- #endif
- #define ElfW(type) _ElfW (Elf, __ELF_NATIVE_CLASS, type)
- #define _ElfW(e,w,t) _ElfW_1 (e, w, _##t)
- #define _ElfW_1(e,w,t) e##w##t
- #include <bits/elfclass.h> /* Defines __ELF_NATIVE_CLASS. */
- struct r_debug
- {
- int r_version;
- struct link_map *r_map;
-
- ElfW(Addr) r_brk;
- enum
- {
-
- RT_CONSISTENT,
- RT_ADD,
- RT_DELETE
- } r_state;
- ElfW(Addr) r_ldbase;
- };
- extern struct r_debug _r_debug;
- extern ElfW(Dyn) _DYNAMIC[];
- #ifdef __FDPIC__
- # include <bits/elf-fdpic.h>
- #endif
- #ifdef __DSBT__
- # include <bits/elf-dsbt.h>
- #endif
- struct link_map
- {
-
- #ifdef __FDPIC__
- struct elf32_fdpic_loadaddr l_addr;
- #else
- #ifdef __DSBT__
- struct elf32_dsbt_loadaddr l_addr;
- #else
- ElfW(Addr) l_addr;
- #endif
- #endif
- char *l_name;
- ElfW(Dyn) *l_ld;
- struct link_map *l_next, *l_prev;
- #if defined(USE_TLS) && USE_TLS
-
-
- void *l_tls_initimage;
-
- size_t l_tls_initimage_size;
-
- size_t l_tls_blocksize;
-
- size_t l_tls_align;
-
- size_t l_tls_firstbyte_offset;
- # ifndef NO_TLS_OFFSET
- # define NO_TLS_OFFSET 0
- # endif
-
- ptrdiff_t l_tls_offset;
-
- size_t l_tls_modid;
-
- unsigned int l_need_tls_init:1;
- #endif
- };
- #ifdef __USE_GNU
- #if 0
- #define LAV_CURRENT 1
- enum
- {
- LA_ACT_CONSISTENT,
- LA_ACT_ADD,
- LA_ACT_DELETE
- };
- enum
- {
- LA_SER_ORIG = 0x01,
- LA_SER_LIBPATH = 0x02,
- LA_SER_RUNPATH = 0x04,
- LA_SER_CONFIG = 0x08,
- LA_SER_DEFAULT = 0x40,
- LA_SER_SECURE = 0x80
- };
- enum
- {
- LA_FLG_BINDTO = 0x01,
- LA_FLG_BINDFROM = 0x02
- };
- enum
- {
- LA_SYMB_NOPLTENTER = 0x01,
- LA_SYMB_NOPLTEXIT = 0x02,
- LA_SYMB_STRUCTCALL = 0x04,
- LA_SYMB_DLSYM = 0x08,
- LA_SYMB_ALTVALUE = 0x10
- };
- #endif
- struct dl_phdr_info
- {
- #ifdef __FDPIC__
- struct elf32_fdpic_loadaddr dlpi_addr;
- #else
- #ifdef __DSBT__
- struct elf32_dsbt_loadaddr dlpi_addr;
- #else
- ElfW(Addr) dlpi_addr;
- #endif
- #endif
- const char *dlpi_name;
- const ElfW(Phdr) *dlpi_phdr;
- ElfW(Half) dlpi_phnum;
- #if 0
-
-
- unsigned long long int dlpi_adds;
-
- unsigned long long int dlpi_subs;
-
- size_t dlpi_tls_modid;
-
- void *dlpi_tls_data;
- #endif
- };
- __BEGIN_DECLS
- extern int dl_iterate_phdr (int (*__callback) (struct dl_phdr_info *,
- size_t, void *),
- void *__data);
- #if 0
- extern unsigned int la_version (unsigned int __version);
- extern void la_activity (uintptr_t *__cookie, unsigned int __flag);
- extern char *la_objsearch (const char *__name, uintptr_t *__cookie,
- unsigned int __flag);
- extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid,
- uintptr_t *__cookie);
- extern void la_preinit (uintptr_t *__cookie);
- extern uintptr_t la_symbind32 (Elf32_Sym *__sym, unsigned int __ndx,
- uintptr_t *__refcook, uintptr_t *__defcook,
- unsigned int *__flags, const char *__symname);
- extern uintptr_t la_symbind64 (Elf64_Sym *__sym, unsigned int __ndx,
- uintptr_t *__refcook, uintptr_t *__defcook,
- unsigned int *__flags, const char *__symname);
- extern unsigned int la_objclose (uintptr_t *__cookie);
- #endif
- __END_DECLS
- #endif
- #endif
|