1 /** 2 * D header file for Solaris. 3 * 4 * $(LINK2 http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/sys/link.h, illumos sys/link.h) 5 */ 6 module core.sys.solaris.sys.link; 7 8 version (Solaris): 9 extern (C): 10 nothrow: 11 12 public import core.sys.solaris.sys.elftypes; 13 public import core.sys.elf; 14 import core.stdc.config; 15 16 struct Elf32_Dyn 17 { 18 Elf32_Sword d_tag; 19 union _d_un 20 { 21 Elf32_Word d_val; 22 Elf32_Addr d_ptr; 23 Elf32_Off d_off; 24 } _d_un d_un; 25 } 26 27 struct Elf64_Dyn 28 { 29 Elf64_Xword d_tag; 30 union _d_un 31 { 32 Elf64_Xword d_val; 33 Elf64_Addr d_ptr; 34 } _d_un d_un; 35 } 36 37 enum DT_MAXPOSTAGS = 34; 38 39 enum DT_SUNW_AUXILIARY = 0x6000000d; 40 enum DT_SUNW_RTLDINF = 0x6000000e; 41 enum DT_SUNW_FILTER = 0x6000000f; 42 enum DT_SUNW_CAP = 0x60000010; 43 enum DT_SUNW_SYMTAB = 0x60000011; 44 enum DT_SUNW_SYMSZ = 0x60000012; 45 46 enum DT_SUNW_ENCODING = 0x60000013; 47 enum DT_SUNW_SORTENT = 0x60000013; 48 enum DT_SUNW_SYMSORT = 0x60000014; 49 enum DT_SUNW_SYMSORTSZ = 0x60000015; 50 enum DT_SUNW_TLSSORT = 0x60000016; 51 enum DT_SUNW_TLSSORTSZ = 0x60000017; 52 enum DT_SUNW_CAPINFO = 0x60000018; 53 enum DT_SUNW_STRPAD = 0x60000019; 54 enum DT_SUNW_CAPCHAIN = 0x6000001a; 55 enum DT_SUNW_LDMACH = 0x6000001b; 56 enum DT_SUNW_CAPCHAINENT = 0x6000001d; 57 enum DT_SUNW_CAPCHAINSZ = 0x6000001f; 58 59 enum DT_DEPRECATED_SPARC_REGISTER = 0x7000001; 60 61 enum DT_USED = 0x7ffffffe; 62 63 enum DF_P1_DEFERRED = 0x00000004; 64 65 enum VER_FLG_INFO = 0x4; 66 67 enum SYMINFO_FLG_FILTER = 0x0002; 68 enum SYMINFO_FLG_DIRECTBIND = 0x0010; 69 enum SYMINFO_FLG_NOEXTDIRECT = 0x0020; 70 enum SYMINFO_FLG_AUXILIARY = 0x0040; 71 enum SYMINFO_FLG_INTERPOSE = 0x0080; 72 enum SYMINFO_FLG_CAP = 0x0100; 73 enum SYMINFO_FLG_DEFERRED = 0x0200; 74 75 enum SYMINFO_BT_NONE = 0xfffd; 76 enum SYMINFO_BT_EXTERN = 0xfffc; 77 78 alias link_map Link_map; 79 80 struct link_map 81 { 82 c_ulong l_addr; 83 char* l_name; 84 version (D_LP64) 85 Elf64_Dyn* l_ld; 86 else 87 Elf32_Dyn* l_ld; 88 Link_map* l_next; 89 Link_map* l_prev; 90 char* l_refname; 91 } 92 93 version (_SYSCALL32) 94 { 95 alias link_map32 Link_map32; 96 97 struct link_map32 98 { 99 Elf32_Word l_addr; 100 Elf32_Addr l_name; 101 Elf32_Addr l_ld; 102 Elf32_Addr l_next; 103 Elf32_Addr l_prev; 104 Elf32_Addr l_refname; 105 } 106 } 107 108 enum r_state_e 109 { 110 RT_CONSISTENT, 111 RT_ADD, 112 RT_DELETE 113 } 114 115 enum rd_flags_e 116 { 117 RD_FL_NONE = 0, 118 RD_FL_ODBG = (1<<0), 119 RD_FL_DBG = (1<<1) 120 } 121 122 enum rd_event_e 123 { 124 RD_NONE = 0, 125 RD_PREINIT, 126 RD_POSTINIT, 127 RD_DLACTIVITY 128 } 129 130 struct r_debug 131 { 132 int r_version; 133 Link_map* r_map; 134 c_ulong r_brk; 135 r_state_e r_state; 136 c_ulong r_ldbase; 137 Link_map* r_ldsomap; 138 rd_event_e r_rdevent; 139 rd_flags_e r_flags; 140 } 141 142 version (_SYSCALL32) 143 { 144 struct r_debug32 145 { 146 Elf32_Word r_version; 147 Elf32_Addr r_map; 148 Elf32_Word r_brk; 149 r_state_e r_state; 150 Elf32_Word r_ldbase; 151 Elf32_Addr r_ldsomap; 152 rd_event_e r_rdevent; 153 rd_flags_e r_flags; 154 } 155 } 156 157 enum R_DEBUG_VERSION = 2; 158 159 struct Elf32_Boot 160 { 161 Elf32_Sword eb_tag; 162 union eb_un 163 { 164 Elf32_Word eb_val; 165 Elf32_Addr eb_ptr; 166 Elf32_Off eb_off; 167 } 168 } 169 170 struct Elf64_Boot 171 { 172 Elf64_Xword eb_tag; 173 union eb_un 174 { 175 Elf64_Xword eb_val; 176 Elf64_Addr eb_ptr; 177 Elf64_Off eb_off; 178 } 179 } 180 181 enum EB_NULL = 0; 182 enum EB_DYNAMIC = 1; 183 enum EB_LDSO_BASE = 2; 184 enum EB_ARGV = 3; 185 enum EB_ENVP = 4; 186 enum EB_AUXV = 5; 187 enum EB_DEVZERO = 6; 188 enum EB_PAGESIZE = 7; 189 enum EB_MAX = 8; 190 enum EB_MAX_SIZE32 = 64; 191 enum EB_MAX_SIZE64 = 128; 192 193 void _ld_libc(void *);