]> git.ipfire.org Git - thirdparty/gcc.git/blame - libphobos/libdruntime/core/sys/freebsd/sys/elf64.d
d: Import dmd b8384668f, druntime e6caaab9, phobos 5ab9ad256 (v2.098.0-beta.1)
[thirdparty/gcc.git] / libphobos / libdruntime / core / sys / freebsd / sys / elf64.d
CommitLineData
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 */
6module core.sys.freebsd.sys.elf64;
7
8version (FreeBSD):
9extern (C):
10pure:
11nothrow:
12
13import core.stdc.stdint;
14public import core.sys.freebsd.sys.elf_common;
15
16alias uint16_t Elf64_Half;
17alias uint32_t Elf64_Word;
18alias int32_t Elf64_Sword;
19alias uint64_t Elf64_Lword;
20alias uint64_t Elf64_Xword;
21alias int64_t Elf64_Sxword;
22alias uint64_t Elf64_Addr;
23alias uint64_t Elf64_Off;
24alias Elf64_Word Elf64_Hashelt;
25alias Elf64_Xword Elf64_Size;
26alias Elf64_Sxword Elf64_Ssize;
27
28struct 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
46struct 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
55struct 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
69struct 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
81struct 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
91struct Elf64_Rel
92{
93 Elf64_Addr r_offset;
94 Elf64_Xword r_info;
95}
96
97struct Elf64_Rela
98{
99 Elf64_Addr r_offset;
100 Elf64_Xword r_info;
101 Elf64_Sxword r_addend;
102}
103
104extern (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
115alias Elf_Note Elf64_Nhdr;
116
117struct 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
126extern (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
133struct 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
143struct 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
153extern (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
161struct 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
172struct Elf64_Verdaux
173{
174 Elf64_Word vda_name;
175 Elf64_Word vda_next;
176}
177
178struct 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
187struct 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
196alias Elf64_Half Elf64_Versym;
197
198struct Elf64_Syminfo
199{
200 Elf64_Half si_boundto;
201 Elf64_Half si_flags;
202}