]>
Commit | Line | Data |
---|---|---|
b4c522fa IB |
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 | { | |
0da83a16 | 30 | char[EI_NIDENT] e_ident = 0; |
b4c522fa IB |
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 | ||
1e78c638 IB |
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 | ||
b4c522fa IB |
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 | { | |
106 | auto ELF64_R_SYM(I)(I i) { return i >> 32; } | |
107 | auto ELF64_R_TYPE(I)(I i) { return i & 0xffffffff; } | |
108 | auto ELF64_R_INFO(S, T)(S sym, T type) { return (sym << 32) + (type & 0xffffffff); } | |
109 | ||
110 | auto ELF64_R_TYPE_DATA(I)(I i) { return (cast(Elf64_Xword) i << 32) >> 40; } | |
111 | auto ELF64_R_TYPE_ID(I)(I i) { return (cast(Elf64_Xword) i << 56 ) >> 56; } | |
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 | { | |
128 | auto ELF64_M_SYM(I)(I info) { return info >> 8; } | |
129 | auto ELF64_M_SIZE(I)(I info) { return cast(ubyte)info; } | |
5fee5ec3 | 130 | auto ELF64_M_INFO(S, SZ)(S sym, SZ size) { return (sym << 8) + cast(ubyte)size; } |
b4c522fa IB |
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 | { | |
155 | auto ELF64_ST_BIND(T)(T val) { return cast(ubyte)val >> 4; } | |
156 | auto ELF64_ST_TYPE(T)(T val) { return val & 0xf; } | |
157 | auto ELF64_ST_INFO(B, T)(B bind, T type) { return (bind << 4) + (type & 0xf); } | |
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 | } |