1 /** 2 * D header file for FreeBSD. 3 * 4 * $(LINK2 http://svnweb.freebsd.org/base/head/sys/sys/elf64.h?view=markup, sys/elf64.h) 5 */ 6 module core.sys.freebsd.sys.elf64; 7 8 version (FreeBSD): 9 extern (C): 10 pure: 11 nothrow: 12 13 import core.stdc.stdint; 14 public import core.sys.freebsd.sys.elf_common; 15 16 alias uint16_t Elf64_Half; 17 alias uint32_t Elf64_Word; 18 alias int32_t Elf64_Sword; 19 alias uint64_t Elf64_Lword; 20 alias uint64_t Elf64_Xword; 21 alias int64_t Elf64_Sxword; 22 alias uint64_t Elf64_Addr; 23 alias uint64_t Elf64_Off; 24 alias Elf64_Word Elf64_Hashelt; 25 alias Elf64_Xword Elf64_Size; 26 alias Elf64_Sxword Elf64_Ssize; 27 28 struct Elf64_Ehdr 29 { 30 char[EI_NIDENT] e_ident = 0; 31 Elf64_Half e_type; 32 Elf64_Half e_machine; 33 Elf64_Word e_version; 34 Elf64_Addr e_entry; 35 Elf64_Off e_phoff; 36 Elf64_Off e_shoff; 37 Elf64_Word e_flags; 38 Elf64_Half e_ehsize; 39 Elf64_Half e_phentsize; 40 Elf64_Half e_phnum; 41 Elf64_Half e_shentsize; 42 Elf64_Half e_shnum; 43 Elf64_Half e_shstrndx; 44 } 45 46 struct Elf64_Lib 47 { 48 Elf64_Word l_name; 49 Elf64_Word l_time_stamp; 50 Elf64_Word l_checksum; 51 Elf64_Word l_version; 52 Elf64_Word l_flags; 53 } 54 55 struct Elf64_Shdr 56 { 57 Elf64_Word sh_name; 58 Elf64_Word sh_type; 59 Elf64_Xword sh_flags; 60 Elf64_Addr sh_addr; 61 Elf64_Off sh_offset; 62 Elf64_Xword sh_size; 63 Elf64_Word sh_link; 64 Elf64_Word sh_info; 65 Elf64_Xword sh_addralign; 66 Elf64_Xword sh_entsize; 67 } 68 69 struct Elf64_Phdr 70 { 71 Elf64_Word p_type; 72 Elf64_Word p_flags; 73 Elf64_Off p_offset; 74 Elf64_Addr p_vaddr; 75 Elf64_Addr p_paddr; 76 Elf64_Xword p_filesz; 77 Elf64_Xword p_memsz; 78 Elf64_Xword p_align; 79 } 80 81 struct Elf64_Dyn 82 { 83 Elf64_Sxword d_tag; 84 union _d_un 85 { 86 Elf64_Xword d_val; 87 Elf64_Addr d_ptr; 88 } _d_un d_un; 89 } 90 91 struct Elf64_Rel 92 { 93 Elf64_Addr r_offset; 94 Elf64_Xword r_info; 95 } 96 97 struct Elf64_Rela 98 { 99 Elf64_Addr r_offset; 100 Elf64_Xword r_info; 101 Elf64_Sxword r_addend; 102 } 103 104 extern (D) 105 { ELF64_R_SYM(I)106 auto ELF64_R_SYM(I)(I i) { return i >> 32; } ELF64_R_TYPE(I)107 auto ELF64_R_TYPE(I)(I i) { return i & 0xffffffff; } ELF64_R_INFO(S,T)108 auto ELF64_R_INFO(S, T)(S sym, T type) { return (sym << 32) + (type & 0xffffffff); } 109 ELF64_R_TYPE_DATA(I)110 auto ELF64_R_TYPE_DATA(I)(I i) { return (cast(Elf64_Xword) i << 32) >> 40; } ELF64_R_TYPE_ID(I)111 auto ELF64_R_TYPE_ID(I)(I i) { return (cast(Elf64_Xword) i << 56 ) >> 56; } ELF64_R_TYPE_INFO(D,T)112 auto ELF64_R_TYPE_INFO(D, T)(D d, T t) { return cast(Elf64_Xword) d << 8 + cast(Elf64_Xword) t; } 113 } 114 115 alias Elf_Note Elf64_Nhdr; 116 117 struct Elf64_Move 118 { 119 Elf64_Lword m_value; 120 Elf64_Xword m_info; 121 Elf64_Xword m_poffset; 122 Elf64_Half m_repeat; 123 Elf64_Half m_stride; 124 } 125 126 extern (D) 127 { ELF64_M_SYM(I)128 auto ELF64_M_SYM(I)(I info) { return info >> 8; } ELF64_M_SIZE(I)129 auto ELF64_M_SIZE(I)(I info) { return cast(ubyte)info; } ELF64_M_INFO(S,SZ)130 auto ELF64_M_INFO(S, SZ)(S sym, SZ size) { return (sym << 8) + cast(ubye)size; } 131 } 132 133 struct Elf64_Cap 134 { 135 Elf64_Xword c_tag; 136 union _c_un 137 { 138 Elf64_Xword c_val; 139 Elf64_Addr c_ptr; 140 } _c_un c_un; 141 } 142 143 struct Elf64_Sym 144 { 145 Elf64_Word st_name; 146 ubyte st_info; 147 ubyte st_other; 148 Elf64_Half st_shndx; 149 Elf64_Addr st_value; 150 Elf64_Xword st_size; 151 } 152 153 extern (D) 154 { ELF64_ST_BIND(T)155 auto ELF64_ST_BIND(T)(T val) { return cast(ubyte)val >> 4; } ELF64_ST_TYPE(T)156 auto ELF64_ST_TYPE(T)(T val) { return val & 0xf; } ELF64_ST_INFO(B,T)157 auto ELF64_ST_INFO(B, T)(B bind, T type) { return (bind << 4) + (type & 0xf); } ELF64_ST_VISIBILITY(O)158 auto ELF64_ST_VISIBILITY(O)(O o) { return o & 0x03; } 159 } 160 161 struct Elf64_Verdef 162 { 163 Elf64_Half vd_version; 164 Elf64_Half vd_flags; 165 Elf64_Half vd_ndx; 166 Elf64_Half vd_cnt; 167 Elf64_Word vd_hash; 168 Elf64_Word vd_aux; 169 Elf64_Word vd_next; 170 } 171 172 struct Elf64_Verdaux 173 { 174 Elf64_Word vda_name; 175 Elf64_Word vda_next; 176 } 177 178 struct Elf64_Verneed 179 { 180 Elf64_Half vn_version; 181 Elf64_Half vn_cnt; 182 Elf64_Word vn_file; 183 Elf64_Word vn_aux; 184 Elf64_Word vn_next; 185 } 186 187 struct Elf64_Vernaux 188 { 189 Elf64_Word vna_hash; 190 Elf64_Half vna_flags; 191 Elf64_Half vna_other; 192 Elf64_Word vna_name; 193 Elf64_Word vna_next; 194 } 195 196 alias Elf64_Half Elf64_Versym; 197 198 struct Elf64_Syminfo 199 { 200 Elf64_Half si_boundto; 201 Elf64_Half si_flags; 202 } 203