1 /* $NetBSD: link_elf.h,v 1.13 2020/09/22 01:52:16 kamil Exp $ */ 2 3 #ifndef _LINK_ELF_H_ 4 #define _LINK_ELF_H_ 5 6 #include <sys/types.h> 7 #include <sys/exec_elf.h> 8 9 #define R_DEBUG_VERSION 1 /* SVR4 Protocol version */ 10 11 typedef struct link_map { 12 caddr_t l_addr; /* Base Address of library */ 13 #ifdef __mips__ 14 caddr_t l_offs; /* Load Offset of library */ 15 #endif 16 const char *l_name; /* Absolute Path to Library */ 17 void *l_ld; /* Pointer to .dynamic in memory */ 18 struct link_map *l_next; /* linked list of mapped libs */ 19 struct link_map *l_prev; 20 } Link_map; 21 22 /* 23 * Debug rendezvous struct. Pointer to this is set up in the 24 * target code pointed by the DT_DEBUG tag. If it is 25 * defined. 26 */ 27 struct r_debug { 28 int r_version; /* protocol version */ 29 struct link_map *r_map; /* list of loaded images */ 30 31 /* 32 * This is the address of a function internal to the run-time linker, 33 * that will always be called when the linker begins to map in a 34 * library or unmap it, and again when the mapping change is complete. 35 * The debugger can set a breakpoint at this address if it wants to 36 * notice shared object mapping changes. 37 */ 38 void (*r_brk)(void); /* pointer to break point */ 39 enum { 40 /* 41 * This state value describes the mapping change taking place 42 * when the `r_brk' address is called. 43 */ 44 RT_CONSISTENT, /* things are stable */ 45 RT_ADD, /* adding a shared library */ 46 RT_DELETE /* removing a shared library */ 47 } r_state; 48 void *r_ldbase; /* base address of RTLD */ 49 }; 50 51 struct dl_phdr_info 52 { 53 Elf_Addr dlpi_addr; /* module relocation base */ 54 const char *dlpi_name; /* module name */ 55 const Elf_Phdr *dlpi_phdr; /* pointer to module's phdr */ 56 Elf_Half dlpi_phnum; /* number of entries in phdr */ 57 unsigned long long int dlpi_adds; /* total # of loads */ 58 unsigned long long int dlpi_subs; /* total # of unloads */ 59 size_t dlpi_tls_modid; 60 void *dlpi_tls_data; 61 }; 62 63 __BEGIN_DECLS 64 65 int dl_iterate_phdr(int (*)(struct dl_phdr_info *, size_t, void *), 66 void *); 67 68 __END_DECLS 69 70 #endif /* _LINK_ELF_H_ */ 71