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  */
6 module core.sys.solaris.libelf;
7 
8 version (Solaris):
9 extern (C):
10 nothrow:
11 
12 import core.stdc.config;
13 import core.sys.posix.sys.types;
14 import core.sys.solaris.sys.elf;
15 
16 enum 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 
31 enum ELF_F_DIRTY  = 0x1;
32 enum ELF_F_LAYOUT = 0x4;
33 
34 enum 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 
43 enum 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 
70 struct Elf
71 {
72 }
73 
74 struct Elf_Scn
75 {
76 }
77 
78 struct 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 
89 struct Elf_Arsym
90 {
91     char*    as_name;
92     size_t   as_off;
93     c_ulong  as_hash;
94 }
95 
96 struct 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 
106 Elf* elf_begin(int, Elf_Cmd, Elf*);
107 int elf_cntl(Elf*, Elf_Cmd);
108 int elf_end(Elf*);
109 const(char)* elf_errmsg(int);
110 int elf_errno();
111 void elf_fill(int);
112 uint elf_flagdata(Elf_Data*, Elf_Cmd, uint);
113 uint elf_flagehdr(Elf*, Elf_Cmd,  uint);
114 uint elf_flagelf(Elf*, Elf_Cmd, uint);
115 uint elf_flagphdr(Elf*, Elf_Cmd, uint);
116 uint elf_flagscn(Elf_Scn*, Elf_Cmd, uint);
117 uint elf_flagshdr(Elf_Scn*, Elf_Cmd, uint);
118 size_t elf32_fsize(Elf_Type, size_t, uint);
119 Elf_Arhdr* elf_getarhdr(Elf*);
120 Elf_Arsym* elf_getarsym(Elf*, size_t*);
121 off_t elf_getbase(Elf*);
122 Elf_Data* elf_getdata(Elf_Scn*, Elf_Data*);
123 Elf32_Ehdr* elf32_getehdr(Elf*);
124 char* elf_getident(Elf*, size_t*);
125 Elf32_Phdr* elf32_getphdr(Elf*);
126 Elf_Scn* elf_getscn(Elf*, size_t);
127 Elf32_Shdr* elf32_getshdr(Elf_Scn*);
128 int elf_getphnum(Elf*, size_t*);
129 int elf_getphdrnum(Elf*, size_t*);
130 int elf_getshnum(Elf*, size_t*);
131 int elf_getshdrnum(Elf*, size_t*);
132 int elf_getshstrndx(Elf*, size_t*);
133 int elf_getshdrstrndx(Elf*, size_t*);
134 c_ulong elf_hash(const scope char*);
135 uint elf_sys_encoding();
136 long elf32_checksum(Elf*);
137 Elf_Kind elf_kind(Elf*);
138 Elf* elf_memory(char*, size_t);
139 size_t elf_ndxscn(Elf_Scn*);
140 Elf_Data* elf_newdata(Elf_Scn*);
141 Elf32_Ehdr* elf32_newehdr(Elf*);
142 Elf32_Phdr* elf32_newphdr(Elf*, size_t);
143 Elf_Scn* elf_newscn(Elf*);
144 Elf_Scn* elf_nextscn(Elf*, Elf_Scn*);
145 Elf_Cmd elf_next(Elf*);
146 size_t elf_rand(Elf*, size_t);
147 Elf_Data* elf_rawdata(Elf_Scn*, Elf_Data*);
148 char* elf_rawfile(Elf*, size_t*);
149 char* elf_strptr(Elf*, size_t, size_t);
150 off_t elf_update(Elf*, Elf_Cmd);
151 uint elf_version(uint);
152 Elf_Data* elf32_xlatetof(Elf_Data*, const scope Elf_Data*, uint);
153 Elf_Data* elf32_xlatetom(Elf_Data*, const scope Elf_Data*, uint);
154 
version(D_LP64)155 version (D_LP64)
156 {
157 size_t elf64_fsize(Elf_Type, size_t, uint);
158 Elf64_Ehdr* elf64_getehdr(Elf*);
159 Elf64_Phdr* elf64_getphdr(Elf*);
160 Elf64_Shdr* elf64_getshdr(Elf_Scn*);
161 long elf64_checksum(Elf*);
162 Elf64_Ehdr* elf64_newehdr(Elf*);
163 Elf64_Phdr* elf64_newphdr(Elf*, size_t);
164 Elf_Data* elf64_xlatetof(Elf_Data*, const scope Elf_Data*, uint);
165 Elf_Data* elf64_xlatetom(Elf_Data*, const scope Elf_Data*, uint);
166 }
167