]> git.ipfire.org Git - thirdparty/gcc.git/blob - libphobos/libdruntime/core/sys/openbsd/sys/elf32.d
d: Import dmd b8384668f, druntime e6caaab9, phobos 5ab9ad256 (v2.098.0-beta.1)
[thirdparty/gcc.git] / libphobos / libdruntime / core / sys / openbsd / sys / elf32.d
1 /**
2 * D header file for OpenBSD.
3 *
4 * Authors: Iain Buclaw
5 * Based-on: core/sys/freebsd/sys
6 */
7 module core.sys.openbsd.sys.elf32;
8
9 version (OpenBSD):
10
11 extern (C):
12
13 import core.stdc.stdint;
14 public import core.sys.openbsd.sys.elf_common;
15
16 alias uint16_t Elf32_Half;
17 alias uint32_t Elf32_Word;
18 alias int32_t Elf32_Sword;
19 alias uint64_t Elf32_Lword;
20 alias uint32_t Elf32_Addr;
21 alias uint32_t Elf32_Off;
22 alias Elf32_Word Elf32_Hashelt;
23 alias Elf32_Word Elf32_Size;
24 alias Elf32_Sword Elf32_Ssize;
25
26 struct Elf32_Ehdr
27 {
28 char[EI_NIDENT] e_ident = 0;
29 Elf32_Half e_type;
30 Elf32_Half e_machine;
31 Elf32_Word e_version;
32 Elf32_Addr e_entry;
33 Elf32_Off e_phoff;
34 Elf32_Off e_shoff;
35 Elf32_Word e_flags;
36 Elf32_Half e_ehsize;
37 Elf32_Half e_phentsize;
38 Elf32_Half e_phnum;
39 Elf32_Half e_shentsize;
40 Elf32_Half e_shnum;
41 Elf32_Half e_shstrndx;
42 }
43
44 struct Elf32_Shdr
45 {
46 Elf32_Word sh_name;
47 Elf32_Word sh_type;
48 Elf32_Word sh_flags;
49 Elf32_Addr sh_addr;
50 Elf32_Off sh_offset;
51 Elf32_Word sh_size;
52 Elf32_Word sh_link;
53 Elf32_Word sh_info;
54 Elf32_Word sh_addralign;
55 Elf32_Word sh_entsize;
56 }
57
58 struct Elf32_Phdr
59 {
60 Elf32_Word p_type;
61 Elf32_Off p_offset;
62 Elf32_Addr p_vaddr;
63 Elf32_Addr p_paddr;
64 Elf32_Word p_filesz;
65 Elf32_Word p_memsz;
66 Elf32_Word p_flags;
67 Elf32_Word p_align;
68 }
69
70 struct Elf32_Dyn
71 {
72 Elf32_Sword d_tag;
73 union _d_un
74 {
75 Elf32_Word d_val;
76 Elf32_Addr d_ptr;
77 } _d_un d_un;
78 }
79
80 struct Elf32_Rel
81 {
82 Elf32_Addr r_offset;
83 Elf32_Word r_info;
84 }
85
86 struct Elf32_Rela
87 {
88 Elf32_Addr r_offset;
89 Elf32_Word r_info;
90 Elf32_Sword r_addend;
91 }
92
93 extern (D) pure @safe
94 {
95 auto ELF32_R_SYM(V)(V val) { return val >> 8; }
96 auto ELF32_R_TYPE(V)(V val) { return val & 0xff; }
97 auto ELF32_R_INFO(S, T)(S sym, T type) { return (sym << 8) + (type & 0xff); }
98 }
99
100 alias Elf_Note Elf32_Nhdr;
101
102 struct Elf32_Move
103 {
104 Elf32_Lword m_value;
105 Elf32_Word m_info;
106 Elf32_Word m_poffset;
107 Elf32_Half m_repeat;
108 Elf32_Half m_stride;
109 }
110
111 extern (D) pure
112 {
113 auto ELF32_M_SYM(I)(I info) @safe { return info >> 8; }
114 auto ELF32_M_SIZE(I)(I info) { return cast(ubyte)info; }
115 auto ELF32_M_INFO(S, SZ)(S sym, SZ size) { return (sym << 8) + cast(ubyte)size; }
116 }
117
118 struct Elf32_Cap
119 {
120 Elf32_Word c_tag;
121 union _c_un
122 {
123 Elf32_Word c_val;
124 Elf32_Addr c_ptr;
125 } _c_un c_un;
126 }
127
128 struct Elf32_Sym
129 {
130 Elf32_Word st_name;
131 Elf32_Addr st_value;
132 Elf32_Word st_size;
133 ubyte st_info;
134 ubyte st_other;
135 Elf32_Half st_shndx;
136 }
137
138 extern (D) pure
139 {
140 auto ELF32_ST_BIND(T)(T val) { return cast(ubyte)val >> 4; }
141 auto ELF32_ST_TYPE(T)(T val) @safe { return val & 0xf; }
142 auto ELF32_ST_INFO(B, T)(B bind, T type) @safe { return (bind << 4) + (type & 0xf); }
143 auto ELF32_ST_VISIBILITY(O)(O o) @safe { return o & 0x03; }
144 }
145
146 struct Elf32_Verdef
147 {
148 Elf32_Half vd_version;
149 Elf32_Half vd_flags;
150 Elf32_Half vd_ndx;
151 Elf32_Half vd_cnt;
152 Elf32_Word vd_hash;
153 Elf32_Word vd_aux;
154 Elf32_Word vd_next;
155 }
156
157 struct Elf32_Verdaux
158 {
159 Elf32_Word vda_name;
160 Elf32_Word vda_next;
161 }
162
163 struct Elf32_Verneed
164 {
165 Elf32_Half vn_version;
166 Elf32_Half vn_cnt;
167 Elf32_Word vn_file;
168 Elf32_Word vn_aux;
169 Elf32_Word vn_next;
170 }
171
172 struct Elf32_Vernaux
173 {
174 Elf32_Word vna_hash;
175 Elf32_Half vna_flags;
176 Elf32_Half vna_other;
177 Elf32_Word vna_name;
178 Elf32_Word vna_next;
179 }
180
181 alias Elf32_Half Elf32_Versym;
182
183 struct Elf32_Syminfo
184 {
185 Elf32_Half si_boundto;
186 Elf32_Half si_flags;
187 }