1 /** 2 * D header file for NetBSD. 3 * 4 * http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/sys/exec_elf.h 5 */ 6 module core.sys.netbsd.sys.elf64; 7 8 version (NetBSD): 9 extern (C): 10 pure: 11 nothrow: 12 13 import core.stdc.stdint; 14 public import core.sys.netbsd.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_Shdr 47 { 48 Elf64_Word sh_name; 49 Elf64_Word sh_type; 50 Elf64_Xword sh_flags; 51 Elf64_Addr sh_addr; 52 Elf64_Off sh_offset; 53 Elf64_Xword sh_size; 54 Elf64_Word sh_link; 55 Elf64_Word sh_info; 56 Elf64_Xword sh_addralign; 57 Elf64_Xword sh_entsize; 58 } 59 60 struct Elf64_Phdr 61 { 62 Elf64_Word p_type; 63 Elf64_Word p_flags; 64 Elf64_Off p_offset; 65 Elf64_Addr p_vaddr; 66 Elf64_Addr p_paddr; 67 Elf64_Xword p_filesz; 68 Elf64_Xword p_memsz; 69 Elf64_Xword p_align; 70 } 71 72 struct Elf64_Dyn 73 { 74 Elf64_Sxword d_tag; 75 union _d_un 76 { 77 Elf64_Xword d_val; 78 Elf64_Addr d_ptr; 79 } _d_un d_un; 80 } 81 82 struct Elf64_Rel 83 { 84 Elf64_Addr r_offset; 85 Elf64_Xword r_info; 86 } 87 88 struct Elf64_Rela 89 { 90 Elf64_Addr r_offset; 91 Elf64_Xword r_info; 92 Elf64_Sxword r_addend; 93 } 94 95 extern (D) 96 { ELF64_R_SYM(I)97 auto ELF64_R_SYM(I)(I i) { return i >> 32; } ELF64_R_TYPE(I)98 auto ELF64_R_TYPE(I)(I i) { return i & 0xffffffff; } ELF64_R_INFO(S,T)99 auto ELF64_R_INFO(S, T)(S sym, T type) { return (sym << 32) + (type & 0xffffffff); } 100 ELF64_R_TYPE_DATA(I)101 auto ELF64_R_TYPE_DATA(I)(I i) { return (cast(Elf64_Xword) i << 32) >> 40; } ELF64_R_TYPE_ID(I)102 auto ELF64_R_TYPE_ID(I)(I i) { return (cast(Elf64_Xword) i << 56 ) >> 56; } ELF64_R_TYPE_INFO(D,T)103 auto ELF64_R_TYPE_INFO(D, T)(D d, T t) { return cast(Elf64_Xword) d << 8 + cast(Elf64_Xword) t; } 104 } 105 106 alias Elf_Note Elf64_Nhdr; 107 108 struct Elf64_Move 109 { 110 Elf64_Lword m_value; 111 Elf64_Xword m_info; 112 Elf64_Xword m_poffset; 113 Elf64_Half m_repeat; 114 Elf64_Half m_stride; 115 } 116 117 extern (D) 118 { ELF64_M_SYM(I)119 auto ELF64_M_SYM(I)(I info) { return info >> 8; } ELF64_M_SIZE(I)120 auto ELF64_M_SIZE(I)(I info) { return cast(ubyte)info; } ELF64_M_INFO(S,SZ)121 auto ELF64_M_INFO(S, SZ)(S sym, SZ size) { return (sym << 8) + cast(ubyte)size; } 122 } 123 124 struct Elf64_Cap 125 { 126 Elf64_Xword c_tag; 127 union _c_un 128 { 129 Elf64_Xword c_val; 130 Elf64_Addr c_ptr; 131 } _c_un c_un; 132 } 133 134 struct Elf64_Sym 135 { 136 Elf64_Word st_name; 137 ubyte st_info; 138 ubyte st_other; 139 Elf64_Half st_shndx; 140 Elf64_Addr st_value; 141 Elf64_Xword st_size; 142 } 143 144 extern (D) 145 { ELF64_ST_BIND(T)146 auto ELF64_ST_BIND(T)(T val) { return cast(ubyte)val >> 4; } ELF64_ST_TYPE(T)147 auto ELF64_ST_TYPE(T)(T val) { return val & 0xf; } ELF64_ST_INFO(B,T)148 auto ELF64_ST_INFO(B, T)(B bind, T type) { return (bind << 4) + (type & 0xf); } ELF64_ST_VISIBILITY(O)149 auto ELF64_ST_VISIBILITY(O)(O o) { return o & 0x03; } 150 } 151 152 struct Elf64_Verdef 153 { 154 Elf64_Half vd_version; 155 Elf64_Half vd_flags; 156 Elf64_Half vd_ndx; 157 Elf64_Half vd_cnt; 158 Elf64_Word vd_hash; 159 Elf64_Word vd_aux; 160 Elf64_Word vd_next; 161 } 162 163 struct Elf64_Verdaux 164 { 165 Elf64_Word vda_name; 166 Elf64_Word vda_next; 167 } 168 169 struct Elf64_Verneed 170 { 171 Elf64_Half vn_version; 172 Elf64_Half vn_cnt; 173 Elf64_Word vn_file; 174 Elf64_Word vn_aux; 175 Elf64_Word vn_next; 176 } 177 178 struct Elf64_Vernaux 179 { 180 Elf64_Word vna_hash; 181 Elf64_Half vna_flags; 182 Elf64_Half vna_other; 183 Elf64_Word vna_name; 184 Elf64_Word vna_next; 185 } 186 187 alias Elf64_Half Elf64_Versym; 188 189 struct Elf64_Syminfo 190 { 191 Elf64_Half si_boundto; 192 Elf64_Half si_flags; 193 } 194