1/**
2 * D header file for Solaris.
3 *
4 * $(LINK2 http://src.illumos.org/source/xref/illumos-gate/usr/src/head/libelf.h, illumos libelf.h)
5 */
6module core.sys.solaris.libelf;
7
8version (Solaris):
9extern (C):
10nothrow:
11
12import core.stdc.config;
13import core.sys.posix.sys.types;
14import core.sys.solaris.sys.elf;
15
16enum Elf_Cmd
17{
18    ELF_C_NULL = 0,
19    ELF_C_READ,
20    ELF_C_WRITE,
21    ELF_C_CLR,
22    ELF_C_SET,
23    ELF_C_FDDONE,
24    ELF_C_FDREAD,
25    ELF_C_RDWR,
26    ELF_C_WRIMAGE,
27    ELF_C_IMAGE,
28    ELF_C_NUM
29}
30
31enum ELF_F_DIRTY  = 0x1;
32enum ELF_F_LAYOUT = 0x4;
33
34enum Elf_Kind
35{
36    ELF_K_NONE = 0,
37    ELF_K_AR,
38    ELF_K_COFF,
39    ELF_K_ELF,
40    ELF_K_NUM
41}
42
43enum Elf_Type
44{
45    ELF_T_BYTE = 0,
46    ELF_T_ADDR,
47    ELF_T_DYN,
48    ELF_T_EHDR,
49    ELF_T_HALF,
50    ELF_T_OFF,
51    ELF_T_PHDR,
52    ELF_T_RELA,
53    ELF_T_REL,
54    ELF_T_SHDR,
55    ELF_T_SWORD,
56    ELF_T_SYM,
57    ELF_T_WORD,
58    ELF_T_VDEF,
59    ELF_T_VNEED,
60    ELF_T_SXWORD,
61    ELF_T_XWORD,
62    ELF_T_SYMINFO,
63    ELF_T_NOTE,
64    ELF_T_MOVE,
65    ELF_T_MOVEP,
66    ELF_T_CAP,
67    ELF_T_NUM
68}
69
70struct Elf
71{
72}
73
74struct Elf_Scn
75{
76}
77
78struct Elf_Arhdr
79{
80    char*   ar_name;
81    time_t  ar_date;
82    uid_t   ar_uid;
83    gid_t   ar_gid;
84    mode_t  ar_mode;
85    off_t   ar_size;
86    char*   ar_rawname;
87}
88
89struct Elf_Arsym
90{
91    char*    as_name;
92    size_t   as_off;
93    c_ulong  as_hash;
94}
95
96struct Elf_Data
97{
98  void*     d_buf;
99  Elf_Type  d_type;
100  size_t    d_size;
101  off_t     d_off;
102  size_t    d_align;
103  uint      d_version;
104}
105
106Elf* elf_begin(int, Elf_Cmd, Elf*);
107int elf_cntl(Elf*, Elf_Cmd);
108int elf_end(Elf*);
109const(char)* elf_errmsg(int);
110int elf_errno();
111void elf_fill(int);
112uint elf_flagdata(Elf_Data*, Elf_Cmd, uint);
113uint elf_flagehdr(Elf*, Elf_Cmd,  uint);
114uint elf_flagelf(Elf*, Elf_Cmd, uint);
115uint elf_flagphdr(Elf*, Elf_Cmd, uint);
116uint elf_flagscn(Elf_Scn*, Elf_Cmd, uint);
117uint elf_flagshdr(Elf_Scn*, Elf_Cmd, uint);
118size_t elf32_fsize(Elf_Type, size_t, uint);
119Elf_Arhdr* elf_getarhdr(Elf*);
120Elf_Arsym* elf_getarsym(Elf*, size_t*);
121off_t elf_getbase(Elf*);
122Elf_Data* elf_getdata(Elf_Scn*, Elf_Data*);
123Elf32_Ehdr* elf32_getehdr(Elf*);
124char* elf_getident(Elf*, size_t*);
125Elf32_Phdr* elf32_getphdr(Elf*);
126Elf_Scn* elf_getscn(Elf*, size_t);
127Elf32_Shdr* elf32_getshdr(Elf_Scn*);
128int elf_getphnum(Elf*, size_t*);
129int elf_getphdrnum(Elf*, size_t*);
130int elf_getshnum(Elf*, size_t*);
131int elf_getshdrnum(Elf*, size_t*);
132int elf_getshstrndx(Elf*, size_t*);
133int elf_getshdrstrndx(Elf*, size_t*);
134c_ulong elf_hash(const scope char*);
135uint elf_sys_encoding();
136long elf32_checksum(Elf*);
137Elf_Kind elf_kind(Elf*);
138Elf* elf_memory(char*, size_t);
139size_t elf_ndxscn(Elf_Scn*);
140Elf_Data* elf_newdata(Elf_Scn*);
141Elf32_Ehdr* elf32_newehdr(Elf*);
142Elf32_Phdr* elf32_newphdr(Elf*, size_t);
143Elf_Scn* elf_newscn(Elf*);
144Elf_Scn* elf_nextscn(Elf*, Elf_Scn*);
145Elf_Cmd elf_next(Elf*);
146size_t elf_rand(Elf*, size_t);
147Elf_Data* elf_rawdata(Elf_Scn*, Elf_Data*);
148char* elf_rawfile(Elf*, size_t*);
149char* elf_strptr(Elf*, size_t, size_t);
150off_t elf_update(Elf*, Elf_Cmd);
151uint elf_version(uint);
152Elf_Data* elf32_xlatetof(Elf_Data*, const scope Elf_Data*, uint);
153Elf_Data* elf32_xlatetom(Elf_Data*, const scope Elf_Data*, uint);
154
155version (D_LP64)
156{
157size_t elf64_fsize(Elf_Type, size_t, uint);
158Elf64_Ehdr* elf64_getehdr(Elf*);
159Elf64_Phdr* elf64_getphdr(Elf*);
160Elf64_Shdr* elf64_getshdr(Elf_Scn*);
161long elf64_checksum(Elf*);
162Elf64_Ehdr* elf64_newehdr(Elf*);
163Elf64_Phdr* elf64_newphdr(Elf*, size_t);
164Elf_Data* elf64_xlatetof(Elf_Data*, const scope Elf_Data*, uint);
165Elf_Data* elf64_xlatetom(Elf_Data*, const scope Elf_Data*, uint);
166}
167