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
36extern "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. */
44typedef Elf64_Half GElf_Half;
45
46/* Types for signed and unsigned 32-bit quantities. */
47typedef Elf64_Word GElf_Word;
48typedef Elf64_Sword GElf_Sword;
49
50/* Types for signed and unsigned 64-bit quantities. */
51typedef Elf64_Xword GElf_Xword;
52typedef Elf64_Sxword GElf_Sxword;
53
54/* Type of addresses. */
55typedef Elf64_Addr GElf_Addr;
56
57/* Type of file offsets. */
58typedef Elf64_Off GElf_Off;
59
60
61/* The ELF file header. This appears at the start of every ELF file. */
62typedef Elf64_Ehdr GElf_Ehdr;
63
64/* Section header. */
65typedef 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. */
70typedef Elf64_Section GElf_Section;
71
72/* Symbol table entry. */
73typedef Elf64_Sym GElf_Sym;
74
75/* The syminfo section if available contains additional information about
76 every dynamic symbol. */
77typedef Elf64_Syminfo GElf_Syminfo;
78
79/* Relocation table entry without addend (in section of type SHT_REL). */
80typedef Elf64_Rel GElf_Rel;
81
82/* Relocation table entry with addend (in section of type SHT_RELA). */
83typedef Elf64_Rela GElf_Rela;
84
85/* Program segment header. */
86typedef Elf64_Phdr GElf_Phdr;
87
88/* Dynamic section entry. */
89typedef Elf64_Dyn GElf_Dyn;
90
91
92/* Version definition sections. */
93typedef Elf64_Verdef GElf_Verdef;
94
95/* Auxialiary version information. */
96typedef Elf64_Verdaux GElf_Verdaux;
97
98/* Version dependency section. */
99typedef Elf64_Verneed GElf_Verneed;
100
101/* Auxiliary needed version information. */
102typedef Elf64_Vernaux GElf_Vernaux;
103
104
105/* Type for version symbol information. */
106typedef Elf64_Versym GElf_Versym;
107
108
109/* Auxiliary vector. */
110typedef Elf64_auxv_t GElf_auxv_t;
111
112
113/* Note section contents. */
114typedef Elf64_Nhdr GElf_Nhdr;
115
116
117/* Move structure. */
118typedef Elf64_Move GElf_Move;
119
120
121/* Library list structure. */
122typedef 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. */
150extern 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. */
156extern size_t gelf_fsize (Elf *__elf, Elf_Type __type, size_t __count,
157 unsigned int __version);
158
159/* Retrieve object file header. */
160extern GElf_Ehdr *gelf_getehdr (Elf *__elf, GElf_Ehdr *__dest);
161
162/* Update the ELF header. */
163extern int gelf_update_ehdr (Elf *__elf, GElf_Ehdr *__src);
164
165/* Create new ELF header if none exists. */
166extern unsigned long int gelf_newehdr (Elf *__elf, int __class);
167
168/* Get section at OFFSET. */
169extern Elf_Scn *gelf_offscn (Elf *__elf, GElf_Off __offset);
170
171/* Retrieve section header. */
172extern GElf_Shdr *gelf_getshdr (Elf_Scn *__scn, GElf_Shdr *__dst);
173
174/* Update section header. */
175extern int gelf_update_shdr (Elf_Scn *__scn, GElf_Shdr *__src);
176
177/* Retrieve program header table entry. */
178extern GElf_Phdr *gelf_getphdr (Elf *__elf, int __ndx, GElf_Phdr *__dst);
179
180/* Update the program header. */
181extern int gelf_update_phdr (Elf *__elf, int __ndx, GElf_Phdr *__src);
182
183/* Create new program header with PHNUM entries. */
184extern 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. */
189extern 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. */
194extern 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. */
199extern GElf_Rel *gelf_getrel (Elf_Data *__data, int __ndx, GElf_Rel *__dst);
200
201/* Retrieve RELA relocation info at the given index. */
202extern GElf_Rela *gelf_getrela (Elf_Data *__data, int __ndx, GElf_Rela *__dst);
203
204/* Update REL relocation information at given index. */
205extern int gelf_update_rel (Elf_Data *__dst, int __ndx, GElf_Rel *__src);
206
207/* Update RELA relocation information at given index. */
208extern 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. */
212extern 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. */
215extern 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. */
220extern 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. */
226extern 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. */
233extern 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. */
238extern 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. */
243extern GElf_Dyn *gelf_getdyn (Elf_Data *__data, int __ndx, GElf_Dyn *__dst);
244
245/* Update information in dynamic table at the given index. */
246extern int gelf_update_dyn (Elf_Data *__dst, int __ndx, GElf_Dyn *__src);
247
248
249/* Get move structure at the given index. */
250extern GElf_Move *gelf_getmove (Elf_Data *__data, int __ndx, GElf_Move *__dst);
251
252/* Update move structure at the given index. */
253extern int gelf_update_move (Elf_Data *__data, int __ndx,
254 GElf_Move *__src);
255
256
257/* Get library from table at the given index. */
258extern GElf_Lib *gelf_getlib (Elf_Data *__data, int __ndx, GElf_Lib *__dst);
259
260/* Update library in table at the given index. */
261extern int gelf_update_lib (Elf_Data *__data, int __ndx, GElf_Lib *__src);
262
263
264
265/* Retrieve symbol version information at given index. */
266extern GElf_Versym *gelf_getversym (Elf_Data *__data, int __ndx,
267 GElf_Versym *__dst);
268
269/* Update symbol version information. */
270extern int gelf_update_versym (Elf_Data *__data, int __ndx,
271 GElf_Versym *__src);
272
273
274/* Retrieve required symbol version information at given offset. */
275extern GElf_Verneed *gelf_getverneed (Elf_Data *__data, int __offset,
276 GElf_Verneed *__dst);
277
278/* Update required symbol version information. */
279extern int gelf_update_verneed (Elf_Data *__data, int __offset,
280 GElf_Verneed *__src);
281
282/* Retrieve additional required symbol version information at given offset. */
283extern GElf_Vernaux *gelf_getvernaux (Elf_Data *__data, int __offset,
284 GElf_Vernaux *__dst);
285
286/* Update additional required symbol version information. */
287extern int gelf_update_vernaux (Elf_Data *__data, int __offset,
288 GElf_Vernaux *__src);
289
290
291/* Retrieve symbol version definition information at given offset. */
292extern GElf_Verdef *gelf_getverdef (Elf_Data *__data, int __offset,
293 GElf_Verdef *__dst);
294
295/* Update symbol version definition information. */
296extern 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. */
301extern GElf_Verdaux *gelf_getverdaux (Elf_Data *__data, int __offset,
302 GElf_Verdaux *__dst);
303
304/* Update additional symbol version definition information. */
305extern int gelf_update_verdaux (Elf_Data *__data, int __offset,
306 GElf_Verdaux *__src);
307
308
309/* Get auxv entry at the given index. */
310extern GElf_auxv_t *gelf_getauxv (Elf_Data *__data, int __ndx,
311 GElf_auxv_t *__dst);
312
313/* Update auxv entry at the given index. */
314extern 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. */
320extern 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. */
326extern 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.