Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit c66f914

Browse files
authored
Merge pull request #3784 from ibuclaw/coresyself
core.sys.elf: Move shared ELF types and values to a common module
2 parents 27b9a9d + 3454886 commit c66f914

19 files changed

Lines changed: 2596 additions & 6853 deletions

File tree

mak/COPY

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ COPY=\
205205
$(IMPDIR)\core\sys\dragonflybsd\sys\socket.d \
206206
$(IMPDIR)\core\sys\dragonflybsd\sys\sysctl.d \
207207
\
208+
$(IMPDIR)\core\sys\elf\package.d \
209+
\
208210
$(IMPDIR)\core\sys\linux\config.d \
209211
$(IMPDIR)\core\sys\linux\dlfcn.d \
210212
$(IMPDIR)\core\sys\linux\elf.d \

mak/DOCS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ DOCS=\
171171
$(DOCDIR)\core_sys_dragonflybsd_sys_mman.html \
172172
$(DOCDIR)\core_sys_dragonflybsd_sys_socket.html \
173173
\
174+
$(DOCDIR)\core_sys_elf_package.html \
175+
\
174176
$(DOCDIR)\core_sys_freebsd_dlfcn.html \
175177
$(DOCDIR)\core_sys_freebsd_err.html \
176178
$(DOCDIR)\core_sys_freebsd_pthread_np.html \

mak/SRCS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ SRCS=\
204204
src\core\sys\dragonflybsd\sys\socket.d \
205205
src\core\sys\dragonflybsd\sys\sysctl.d \
206206
\
207+
src\core\sys\elf\package.d \
208+
\
207209
src\core\sys\linux\config.d \
208210
src\core\sys\linux\dlfcn.d \
209211
src\core\sys\linux\elf.d \

posix.mak

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ $(DOC_OUTPUT_DIR)/core_sys_dragonflybsd_netinet_%.html : src/core/sys/dragonflyb
222222
$(DOC_OUTPUT_DIR)/core_sys_dragonflybsd_sys_%.html : src/core/sys/dragonflybsd/sys/%.d $(DMD)
223223
$(DMD) $(DDOCFLAGS) -Df$@ project.ddoc $(DOCFMT) $<
224224

225+
$(DOC_OUTPUT_DIR)/core_sys_elf_%.html : src/core/sys/elf/%.d $(DMD)
226+
$(DMD) $(DDOCFLAGS) -Df$@ project.ddoc $(DOCFMT) $<
227+
225228
$(DOC_OUTPUT_DIR)/core_sys_freebsd_%.html : src/core/sys/freebsd/%.d $(DMD)
226229
$(DMD) $(DDOCFLAGS) -Df$@ project.ddoc $(DOCFMT) $<
227230

src/core/sys/dragonflybsd/sys/elf32.d

Lines changed: 2 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -13,108 +13,13 @@ extern (C):
1313
import core.stdc.stdint;
1414
public import core.sys.dragonflybsd.sys.elf_common;
1515

16-
alias uint16_t Elf32_Half;
17-
alias uint32_t Elf32_Word;
18-
alias int32_t Elf32_Sword;
1916
alias uint64_t Elf32_Lword;
20-
alias uint32_t Elf32_Addr;
21-
alias uint32_t Elf32_Off;
2217
alias Elf32_Word Elf32_Hashelt;
2318
alias Elf32_Word Elf32_Size;
2419
alias Elf32_Sword Elf32_Ssize;
2520

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-
10021
alias Elf_Note Elf32_Nhdr;
10122

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-
11823
struct Elf32_Cap
11924
{
12025
Elf32_Word c_tag;
@@ -125,63 +30,7 @@ struct Elf32_Cap
12530
} _c_un c_un;
12631
}
12732

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
33+
extern (D)
18434
{
185-
Elf32_Half si_boundto;
186-
Elf32_Half si_flags;
35+
auto ELF32_ST_VISIBILITY(O)(O o) { return o & 0x03; }
18736
}

src/core/sys/dragonflybsd/sys/elf64.d

Lines changed: 2 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -13,114 +13,20 @@ extern (C):
1313
import core.stdc.stdint;
1414
public import core.sys.dragonflybsd.sys.elf_common;
1515

16-
alias uint16_t Elf64_Half;
17-
alias uint32_t Elf64_Word;
18-
alias int32_t Elf64_Sword;
1916
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;
2417
alias Elf64_Word Elf64_Hashelt;
2518
alias Elf64_Xword Elf64_Size;
2619
alias Elf64_Sxword Elf64_Ssize;
2720

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-
9521
extern (D) pure
9622
{
97-
auto ELF64_R_SYM(I)(I i) @safe { return i >> 32; }
98-
auto ELF64_R_TYPE(I)(I i) @safe { return i & 0xffffffff; }
99-
auto ELF64_R_INFO(S, T)(S sym, T type) @safe { return (sym << 32) + (type & 0xffffffff); }
100-
10123
auto ELF64_R_TYPE_DATA(I)(I i) { return (cast(Elf64_Xword) i << 32) >> 40; }
10224
auto ELF64_R_TYPE_ID(I)(I i) { return (cast(Elf64_Xword) i << 56 ) >> 56; }
10325
auto ELF64_R_TYPE_INFO(D, T)(D d, T t) { return cast(Elf64_Xword) d << 8 + cast(Elf64_Xword) t; }
10426
}
10527

10628
alias Elf_Note Elf64_Nhdr;
10729

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) pure
118-
{
119-
auto ELF64_M_SYM(I)(I info) @safe { return info >> 8; }
120-
auto ELF64_M_SIZE(I)(I info) { return cast(ubyte)info; }
121-
auto ELF64_M_INFO(S, SZ)(S sym, SZ size) @safe { return (sym << 8) + cast(ubyte)size; }
122-
}
123-
12430
struct Elf64_Cap
12531
{
12632
Elf64_Xword c_tag;
@@ -131,63 +37,7 @@ struct Elf64_Cap
13137
} _c_un c_un;
13238
}
13339

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) pure
145-
{
146-
auto ELF64_ST_BIND(T)(T val) { return cast(ubyte)val >> 4; }
147-
auto ELF64_ST_TYPE(T)(T val) @safe { return val & 0xf; }
148-
auto ELF64_ST_INFO(B, T)(B bind, T type) @safe { return (bind << 4) + (type & 0xf); }
149-
auto ELF64_ST_VISIBILITY(O)(O o) @safe { 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
40+
extern (D)
19041
{
191-
Elf64_Half si_boundto;
192-
Elf64_Half si_flags;
42+
auto ELF64_ST_VISIBILITY(O)(O o) { return o & 0x03; }
19343
}

0 commit comments

Comments
 (0)