Warning: That file was not part of the compilation database. It may have many parsing errors.
1 | /* This file defines generic ELF types, structures, and macros. |
---|---|
2 | Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2007 Red Hat, Inc. |
3 | This file is part of elfutils. |
4 | |
5 | This file is free software; you can redistribute it and/or modify |
6 | it under the terms of either |
7 | |
8 | * the GNU Lesser General Public License as published by the Free |
9 | Software Foundation; either version 3 of the License, or (at |
10 | your option) any later version |
11 | |
12 | or |
13 | |
14 | * the GNU General Public License as published by the Free |
15 | Software Foundation; either version 2 of the License, or (at |
16 | your option) any later version |
17 | |
18 | or both in parallel, as here. |
19 | |
20 | elfutils is distributed in the hope that it will be useful, but |
21 | WITHOUT ANY WARRANTY; without even the implied warranty of |
22 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
23 | General Public License for more details. |
24 | |
25 | You should have received copies of the GNU General Public License and |
26 | the GNU Lesser General Public License along with this program. If |
27 | not, see <http://www.gnu.org/licenses/>. */ |
28 | |
29 | #ifndef _GELF_H |
30 | #define _GELF_H 1 |
31 | |
32 | #include <libelf.h> |
33 | |
34 | |
35 | #ifdef __cplusplus |
36 | extern "C"{ |
37 | #endif |
38 | |
39 | /* Class independent type definitions. Correctly speaking this is not |
40 | true. We assume that 64-bit binaries are the largest class and |
41 | therefore all other classes can be represented without loss. */ |
42 | |
43 | /* Type for a 16-bit quantity. */ |
44 | typedef Elf64_Half GElf_Half; |
45 | |
46 | /* Types for signed and unsigned 32-bit quantities. */ |
47 | typedef Elf64_Word GElf_Word; |
48 | typedef Elf64_Sword GElf_Sword; |
49 | |
50 | /* Types for signed and unsigned 64-bit quantities. */ |
51 | typedef Elf64_Xword GElf_Xword; |
52 | typedef Elf64_Sxword GElf_Sxword; |
53 | |
54 | /* Type of addresses. */ |
55 | typedef Elf64_Addr GElf_Addr; |
56 | |
57 | /* Type of file offsets. */ |
58 | typedef Elf64_Off GElf_Off; |
59 | |
60 | |
61 | /* The ELF file header. This appears at the start of every ELF file. */ |
62 | typedef Elf64_Ehdr GElf_Ehdr; |
63 | |
64 | /* Section header. */ |
65 | typedef Elf64_Shdr GElf_Shdr; |
66 | |
67 | /* Section index. */ |
68 | /* XXX This should probably be a larger type in preparation of times when |
69 | regular section indices can be larger. */ |
70 | typedef Elf64_Section GElf_Section; |
71 | |
72 | /* Symbol table entry. */ |
73 | typedef Elf64_Sym GElf_Sym; |
74 | |
75 | /* The syminfo section if available contains additional information about |
76 | every dynamic symbol. */ |
77 | typedef Elf64_Syminfo GElf_Syminfo; |
78 | |
79 | /* Relocation table entry without addend (in section of type SHT_REL). */ |
80 | typedef Elf64_Rel GElf_Rel; |
81 | |
82 | /* Relocation table entry with addend (in section of type SHT_RELA). */ |
83 | typedef Elf64_Rela GElf_Rela; |
84 | |
85 | /* Program segment header. */ |
86 | typedef Elf64_Phdr GElf_Phdr; |
87 | |
88 | /* Dynamic section entry. */ |
89 | typedef Elf64_Dyn GElf_Dyn; |
90 | |
91 | |
92 | /* Version definition sections. */ |
93 | typedef Elf64_Verdef GElf_Verdef; |
94 | |
95 | /* Auxialiary version information. */ |
96 | typedef Elf64_Verdaux GElf_Verdaux; |
97 | |
98 | /* Version dependency section. */ |
99 | typedef Elf64_Verneed GElf_Verneed; |
100 | |
101 | /* Auxiliary needed version information. */ |
102 | typedef Elf64_Vernaux GElf_Vernaux; |
103 | |
104 | |
105 | /* Type for version symbol information. */ |
106 | typedef Elf64_Versym GElf_Versym; |
107 | |
108 | |
109 | /* Auxiliary vector. */ |
110 | typedef Elf64_auxv_t GElf_auxv_t; |
111 | |
112 | |
113 | /* Note section contents. */ |
114 | typedef Elf64_Nhdr GElf_Nhdr; |
115 | |
116 | |
117 | /* Move structure. */ |
118 | typedef Elf64_Move GElf_Move; |
119 | |
120 | |
121 | /* Library list structure. */ |
122 | typedef Elf64_Lib GElf_Lib; |
123 | |
124 | |
125 | /* How to extract and insert information held in the st_info field. */ |
126 | |
127 | #define GELF_ST_BIND(val) ELF64_ST_BIND (val) |
128 | #define GELF_ST_TYPE(val) ELF64_ST_TYPE (val) |
129 | #define GELF_ST_INFO(bind, type) ELF64_ST_INFO (bind, type) |
130 | |
131 | /* How to extract information held in the st_other field. */ |
132 | |
133 | #define GELF_ST_VISIBILITY(val) ELF64_ST_VISIBILITY (val) |
134 | |
135 | |
136 | /* How to extract and insert information held in the r_info field. */ |
137 | |
138 | #define GELF_R_SYM(info) ELF64_R_SYM (info) |
139 | #define GELF_R_TYPE(info) ELF64_R_TYPE (info) |
140 | #define GELF_R_INFO(sym, type) ELF64_R_INFO (sym, type) |
141 | |
142 | |
143 | /* How to extract and insert information held in the m_info field. */ |
144 | #define GELF_M_SYM(info) ELF64_M_SYM (info) |
145 | #define GELF_M_SIZE(info) ELF64_M_SIZE (info) |
146 | #define GELF_M_INFO(sym, size) ELF64_M_INFO (sym, size) |
147 | |
148 | |
149 | /* Get class of the file associated with ELF. */ |
150 | extern int gelf_getclass (Elf *__elf); |
151 | |
152 | |
153 | /* Return size of array of COUNT elements of the type denoted by TYPE |
154 | in the external representation. The binary class is taken from ELF. |
155 | The result is based on version VERSION of the ELF standard. */ |
156 | extern size_t gelf_fsize (Elf *__elf, Elf_Type __type, size_t __count, |
157 | unsigned int __version); |
158 | |
159 | /* Retrieve object file header. */ |
160 | extern GElf_Ehdr *gelf_getehdr (Elf *__elf, GElf_Ehdr *__dest); |
161 | |
162 | /* Update the ELF header. */ |
163 | extern int gelf_update_ehdr (Elf *__elf, GElf_Ehdr *__src); |
164 | |
165 | /* Create new ELF header if none exists. */ |
166 | extern unsigned long int gelf_newehdr (Elf *__elf, int __class); |
167 | |
168 | /* Get section at OFFSET. */ |
169 | extern Elf_Scn *gelf_offscn (Elf *__elf, GElf_Off __offset); |
170 | |
171 | /* Retrieve section header. */ |
172 | extern GElf_Shdr *gelf_getshdr (Elf_Scn *__scn, GElf_Shdr *__dst); |
173 | |
174 | /* Update section header. */ |
175 | extern int gelf_update_shdr (Elf_Scn *__scn, GElf_Shdr *__src); |
176 | |
177 | /* Retrieve program header table entry. */ |
178 | extern GElf_Phdr *gelf_getphdr (Elf *__elf, int __ndx, GElf_Phdr *__dst); |
179 | |
180 | /* Update the program header. */ |
181 | extern int gelf_update_phdr (Elf *__elf, int __ndx, GElf_Phdr *__src); |
182 | |
183 | /* Create new program header with PHNUM entries. */ |
184 | extern unsigned long int gelf_newphdr (Elf *__elf, size_t __phnum); |
185 | |
186 | |
187 | /* Convert data structure from the representation in the file represented |
188 | by ELF to their memory representation. */ |
189 | extern Elf_Data *gelf_xlatetom (Elf *__elf, Elf_Data *__dest, |
190 | const Elf_Data *__src, unsigned int __encode); |
191 | |
192 | /* Convert data structure from to the representation in memory |
193 | represented by ELF file representation. */ |
194 | extern Elf_Data *gelf_xlatetof (Elf *__elf, Elf_Data *__dest, |
195 | const Elf_Data *__src, unsigned int __encode); |
196 | |
197 | |
198 | /* Retrieve REL relocation info at the given index. */ |
199 | extern GElf_Rel *gelf_getrel (Elf_Data *__data, int __ndx, GElf_Rel *__dst); |
200 | |
201 | /* Retrieve RELA relocation info at the given index. */ |
202 | extern GElf_Rela *gelf_getrela (Elf_Data *__data, int __ndx, GElf_Rela *__dst); |
203 | |
204 | /* Update REL relocation information at given index. */ |
205 | extern int gelf_update_rel (Elf_Data *__dst, int __ndx, GElf_Rel *__src); |
206 | |
207 | /* Update RELA relocation information at given index. */ |
208 | extern int gelf_update_rela (Elf_Data *__dst, int __ndx, GElf_Rela *__src); |
209 | |
210 | |
211 | /* Retrieve symbol information from the symbol table at the given index. */ |
212 | extern GElf_Sym *gelf_getsym (Elf_Data *__data, int __ndx, GElf_Sym *__dst); |
213 | |
214 | /* Update symbol information in the symbol table at the given index. */ |
215 | extern int gelf_update_sym (Elf_Data *__data, int __ndx, GElf_Sym *__src); |
216 | |
217 | |
218 | /* Retrieve symbol information and separate section index from the |
219 | symbol table at the given index. */ |
220 | extern GElf_Sym *gelf_getsymshndx (Elf_Data *__symdata, Elf_Data *__shndxdata, |
221 | int __ndx, GElf_Sym *__sym, |
222 | Elf32_Word *__xshndx); |
223 | |
224 | /* Update symbol information and separate section index in the symbol |
225 | table at the given index. */ |
226 | extern int gelf_update_symshndx (Elf_Data *__symdata, Elf_Data *__shndxdata, |
227 | int __ndx, GElf_Sym *__sym, |
228 | Elf32_Word __xshndx); |
229 | |
230 | |
231 | /* Retrieve additional symbol information from the symbol table at the |
232 | given index. */ |
233 | extern GElf_Syminfo *gelf_getsyminfo (Elf_Data *__data, int __ndx, |
234 | GElf_Syminfo *__dst); |
235 | |
236 | /* Update additional symbol information in the symbol table at the |
237 | given index. */ |
238 | extern int gelf_update_syminfo (Elf_Data *__data, int __ndx, |
239 | GElf_Syminfo *__src); |
240 | |
241 | |
242 | /* Get information from dynamic table at the given index. */ |
243 | extern GElf_Dyn *gelf_getdyn (Elf_Data *__data, int __ndx, GElf_Dyn *__dst); |
244 | |
245 | /* Update information in dynamic table at the given index. */ |
246 | extern int gelf_update_dyn (Elf_Data *__dst, int __ndx, GElf_Dyn *__src); |
247 | |
248 | |
249 | /* Get move structure at the given index. */ |
250 | extern GElf_Move *gelf_getmove (Elf_Data *__data, int __ndx, GElf_Move *__dst); |
251 | |
252 | /* Update move structure at the given index. */ |
253 | extern int gelf_update_move (Elf_Data *__data, int __ndx, |
254 | GElf_Move *__src); |
255 | |
256 | |
257 | /* Get library from table at the given index. */ |
258 | extern GElf_Lib *gelf_getlib (Elf_Data *__data, int __ndx, GElf_Lib *__dst); |
259 | |
260 | /* Update library in table at the given index. */ |
261 | extern int gelf_update_lib (Elf_Data *__data, int __ndx, GElf_Lib *__src); |
262 | |
263 | |
264 | |
265 | /* Retrieve symbol version information at given index. */ |
266 | extern GElf_Versym *gelf_getversym (Elf_Data *__data, int __ndx, |
267 | GElf_Versym *__dst); |
268 | |
269 | /* Update symbol version information. */ |
270 | extern int gelf_update_versym (Elf_Data *__data, int __ndx, |
271 | GElf_Versym *__src); |
272 | |
273 | |
274 | /* Retrieve required symbol version information at given offset. */ |
275 | extern GElf_Verneed *gelf_getverneed (Elf_Data *__data, int __offset, |
276 | GElf_Verneed *__dst); |
277 | |
278 | /* Update required symbol version information. */ |
279 | extern int gelf_update_verneed (Elf_Data *__data, int __offset, |
280 | GElf_Verneed *__src); |
281 | |
282 | /* Retrieve additional required symbol version information at given offset. */ |
283 | extern GElf_Vernaux *gelf_getvernaux (Elf_Data *__data, int __offset, |
284 | GElf_Vernaux *__dst); |
285 | |
286 | /* Update additional required symbol version information. */ |
287 | extern int gelf_update_vernaux (Elf_Data *__data, int __offset, |
288 | GElf_Vernaux *__src); |
289 | |
290 | |
291 | /* Retrieve symbol version definition information at given offset. */ |
292 | extern GElf_Verdef *gelf_getverdef (Elf_Data *__data, int __offset, |
293 | GElf_Verdef *__dst); |
294 | |
295 | /* Update symbol version definition information. */ |
296 | extern int gelf_update_verdef (Elf_Data *__data, int __offset, |
297 | GElf_Verdef *__src); |
298 | |
299 | /* Retrieve additional symbol version definition information at given |
300 | offset. */ |
301 | extern GElf_Verdaux *gelf_getverdaux (Elf_Data *__data, int __offset, |
302 | GElf_Verdaux *__dst); |
303 | |
304 | /* Update additional symbol version definition information. */ |
305 | extern int gelf_update_verdaux (Elf_Data *__data, int __offset, |
306 | GElf_Verdaux *__src); |
307 | |
308 | |
309 | /* Get auxv entry at the given index. */ |
310 | extern GElf_auxv_t *gelf_getauxv (Elf_Data *__data, int __ndx, |
311 | GElf_auxv_t *__dst); |
312 | |
313 | /* Update auxv entry at the given index. */ |
314 | extern int gelf_update_auxv (Elf_Data *__data, int __ndx, GElf_auxv_t *__src); |
315 | |
316 | |
317 | /* Get note header at the given offset into the data, and the offsets of |
318 | the note's name and descriptor data. Returns the offset of the next |
319 | note header, or 0 for an invalid offset or corrupt note header. */ |
320 | extern size_t gelf_getnote (Elf_Data *__data, size_t __offset, |
321 | GElf_Nhdr *__result, |
322 | size_t *__name_offset, size_t *__desc_offset); |
323 | |
324 | |
325 | /* Compute simple checksum from permanent parts of the ELF file. */ |
326 | extern long int gelf_checksum (Elf *__elf); |
327 | |
328 | #ifdef __cplusplus |
329 | } |
330 | #endif |
331 | |
332 | #endif /* gelf.h */ |
333 |
Warning: That file was not part of the compilation database. It may have many parsing errors.