Merge commit '6e270ca825f06ec0e2d77db462b83074ec585f2f'
[unleashed.git] / include / libelf.h
blob722d0cdc97427e261fd0881f177de442c17ece15
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
21 /* Copyright (c) 1988 AT&T */
22 /* All Rights Reserved */
25 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
27 * Copyright 2014 PALO, Richard. All rights reserved.
30 #ifndef _LIBELF_H
31 #define _LIBELF_H
33 #include <sys/types.h>
34 #include <sys/elf.h>
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
42 #if defined(_ILP32) && (_FILE_OFFSET_BITS != 32)
43 #error "large files are not supported by libelf"
44 #endif
46 typedef void Elf_Void;
49 * Commands
51 typedef enum {
52 ELF_C_NULL = 0, /* must be first, 0 */
53 ELF_C_READ,
54 ELF_C_WRITE,
55 ELF_C_CLR,
56 ELF_C_SET,
57 ELF_C_FDDONE,
58 ELF_C_FDREAD,
59 ELF_C_RDWR,
60 ELF_C_WRIMAGE,
61 ELF_C_IMAGE,
62 ELF_C_NUM /* must be last */
63 } Elf_Cmd;
67 * Flags
69 #define ELF_F_DIRTY 0x1
70 #define ELF_F_LAYOUT 0x4
74 * File types
76 typedef enum {
77 ELF_K_NONE = 0, /* must be first, 0 */
78 ELF_K_AR,
79 ELF_K_COFF,
80 ELF_K_ELF,
81 ELF_K_NUM /* must be last */
82 } Elf_Kind;
86 * Translation types
88 typedef enum {
89 ELF_T_BYTE = 0, /* must be first, 0 */
90 ELF_T_ADDR,
91 ELF_T_DYN,
92 ELF_T_EHDR,
93 ELF_T_HALF,
94 ELF_T_OFF,
95 ELF_T_PHDR,
96 ELF_T_RELA,
97 ELF_T_REL,
98 ELF_T_SHDR,
99 ELF_T_SWORD,
100 ELF_T_SYM,
101 ELF_T_WORD,
102 ELF_T_VDEF,
103 ELF_T_VNEED,
104 ELF_T_SXWORD,
105 ELF_T_XWORD,
106 ELF_T_SYMINFO,
107 ELF_T_NOTE,
108 ELF_T_MOVE,
109 ELF_T_MOVEP,
110 ELF_T_CAP,
111 ELF_T_NUM /* must be last */
112 } Elf_Type;
115 typedef struct Elf Elf;
116 typedef struct Elf_Scn Elf_Scn;
120 * Archive member header
122 typedef struct {
123 char *ar_name;
124 time_t ar_date;
125 uid_t ar_uid;
126 gid_t ar_gid;
127 mode_t ar_mode;
128 off_t ar_size;
129 char *ar_rawname;
130 } Elf_Arhdr;
134 * Archive symbol table
136 typedef struct {
137 char *as_name;
138 size_t as_off;
139 unsigned long as_hash;
140 } Elf_Arsym;
144 * Data descriptor
146 typedef struct {
147 Elf_Void *d_buf;
148 Elf_Type d_type;
149 size_t d_size;
150 off_t d_off; /* offset into section */
151 size_t d_align; /* alignment in section */
152 unsigned d_version; /* elf version */
153 } Elf_Data;
157 * Function declarations
159 Elf *elf_begin(int, Elf_Cmd, Elf *);
160 int elf_cntl(Elf *, Elf_Cmd);
161 int elf_end(Elf *);
162 const char *elf_errmsg(int);
163 int elf_errno(void);
164 void elf_fill(int);
165 unsigned elf_flagdata(Elf_Data *, Elf_Cmd, unsigned);
166 unsigned elf_flagehdr(Elf *, Elf_Cmd, unsigned);
167 unsigned elf_flagelf(Elf *, Elf_Cmd, unsigned);
168 unsigned elf_flagphdr(Elf *, Elf_Cmd, unsigned);
169 unsigned elf_flagscn(Elf_Scn *, Elf_Cmd, unsigned);
170 unsigned elf_flagshdr(Elf_Scn *, Elf_Cmd, unsigned);
171 size_t elf32_fsize(Elf_Type, size_t, unsigned);
172 Elf_Arhdr *elf_getarhdr(Elf *);
173 Elf_Arsym *elf_getarsym(Elf *, size_t *);
174 off_t elf_getbase(Elf *);
175 Elf_Data *elf_getdata(Elf_Scn *, Elf_Data *);
176 Elf32_Ehdr *elf32_getehdr(Elf *);
177 char *elf_getident(Elf *, size_t *);
178 Elf32_Phdr *elf32_getphdr(Elf *);
179 Elf_Scn *elf_getscn(Elf *elf, size_t);
180 Elf32_Shdr *elf32_getshdr(Elf_Scn *);
181 int elf_getphnum(Elf *, size_t *);
182 int elf_getphdrnum(Elf *, size_t *);
183 int elf_getshnum(Elf *, size_t *);
184 int elf_getshdrnum(Elf *, size_t *);
185 int elf_getshstrndx(Elf *, size_t *);
186 int elf_getshdrstrndx(Elf *, size_t *);
187 unsigned long elf_hash(const char *);
188 uint_t elf_sys_encoding(void);
189 long elf32_checksum(Elf *);
190 Elf_Kind elf_kind(Elf *);
191 Elf *elf_memory(char *, size_t);
192 size_t elf_ndxscn(Elf_Scn *);
193 Elf_Data *elf_newdata(Elf_Scn *);
194 Elf32_Ehdr *elf32_newehdr(Elf *);
195 Elf32_Phdr *elf32_newphdr(Elf *, size_t);
196 Elf_Scn *elf_newscn(Elf *);
197 Elf_Scn *elf_nextscn(Elf *, Elf_Scn *);
198 Elf_Cmd elf_next(Elf *);
199 size_t elf_rand(Elf *, size_t);
200 Elf_Data *elf_rawdata(Elf_Scn *, Elf_Data *);
201 char *elf_rawfile(Elf *, size_t *);
202 char *elf_strptr(Elf *, size_t, size_t);
203 off_t elf_update(Elf *, Elf_Cmd);
204 unsigned elf_version(unsigned);
205 Elf_Data *elf32_xlatetof(Elf_Data *, const Elf_Data *, unsigned);
206 Elf_Data *elf32_xlatetom(Elf_Data *, const Elf_Data *, unsigned);
208 #if defined(_LP64) || defined(_LONGLONG_TYPE)
209 size_t elf64_fsize(Elf_Type, size_t, unsigned);
210 Elf64_Ehdr *elf64_getehdr(Elf *);
211 Elf64_Phdr *elf64_getphdr(Elf *);
212 Elf64_Shdr *elf64_getshdr(Elf_Scn *);
213 long elf64_checksum(Elf *);
214 Elf64_Ehdr *elf64_newehdr(Elf *);
215 Elf64_Phdr *elf64_newphdr(Elf *, size_t);
216 Elf_Data *elf64_xlatetof(Elf_Data *, const Elf_Data *, unsigned);
217 Elf_Data *elf64_xlatetom(Elf_Data *, const Elf_Data *, unsigned);
218 #endif /* (defined(_LP64) || defined(_LONGLONG_TYPE) */
220 #ifdef __cplusplus
222 #endif
224 #endif /* _LIBELF_H */