1 /* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21 /* Copyright (c) 1988 AT&T */ 22 /* All Rights Reserved */ 23 24 /* 25 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 #ifndef _LIBELF_H 30 #define _LIBELF_H 31 32 #include <sys/types.h> 33 #include <sys/elf.h> 34 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 41 #if defined(_ILP32) && (_FILE_OFFSET_BITS != 32) 42 #error "large files are not supported by libelf" 43 #endif 44 45 46 #undef _ 47 #ifdef __STDC__ 48 typedef void Elf_Void; 49 #define _(a) a 50 #else 51 typedef char Elf_Void; 52 #define _(a) () 53 #undef const 54 #define const 55 #endif 56 57 58 /* 59 * Commands 60 */ 61 typedef enum { 62 ELF_C_NULL = 0, /* must be first, 0 */ 63 ELF_C_READ, 64 ELF_C_WRITE, 65 ELF_C_CLR, 66 ELF_C_SET, 67 ELF_C_FDDONE, 68 ELF_C_FDREAD, 69 ELF_C_RDWR, 70 ELF_C_WRIMAGE, 71 ELF_C_IMAGE, 72 ELF_C_NUM /* must be last */ 73 } Elf_Cmd; 74 75 76 /* 77 * Flags 78 */ 79 #define ELF_F_DIRTY 0x1 80 #define ELF_F_LAYOUT 0x4 81 82 83 /* 84 * File types 85 */ 86 typedef enum { 87 ELF_K_NONE = 0, /* must be first, 0 */ 88 ELF_K_AR, 89 ELF_K_COFF, 90 ELF_K_ELF, 91 ELF_K_NUM /* must be last */ 92 } Elf_Kind; 93 94 95 /* 96 * Translation types 97 */ 98 typedef enum { 99 ELF_T_BYTE = 0, /* must be first, 0 */ 100 ELF_T_ADDR, 101 ELF_T_DYN, 102 ELF_T_EHDR, 103 ELF_T_HALF, 104 ELF_T_OFF, 105 ELF_T_PHDR, 106 ELF_T_RELA, 107 ELF_T_REL, 108 ELF_T_SHDR, 109 ELF_T_SWORD, 110 ELF_T_SYM, 111 ELF_T_WORD, 112 ELF_T_VDEF, 113 ELF_T_VNEED, 114 ELF_T_SXWORD, 115 ELF_T_XWORD, 116 ELF_T_SYMINFO, 117 ELF_T_NOTE, 118 ELF_T_MOVE, 119 ELF_T_MOVEP, 120 ELF_T_CAP, 121 ELF_T_NUM /* must be last */ 122 } Elf_Type; 123 124 125 typedef struct Elf Elf; 126 typedef struct Elf_Scn Elf_Scn; 127 128 129 /* 130 * Archive member header 131 */ 132 typedef struct { 133 char *ar_name; 134 time_t ar_date; 135 uid_t ar_uid; 136 gid_t ar_gid; 137 mode_t ar_mode; 138 off_t ar_size; 139 char *ar_rawname; 140 } Elf_Arhdr; 141 142 143 /* 144 * Archive symbol table 145 */ 146 typedef struct { 147 char *as_name; 148 size_t as_off; 149 unsigned long as_hash; 150 } Elf_Arsym; 151 152 153 /* 154 * Data descriptor 155 */ 156 typedef struct { 157 Elf_Void *d_buf; 158 Elf_Type d_type; 159 size_t d_size; 160 off_t d_off; /* offset into section */ 161 size_t d_align; /* alignment in section */ 162 unsigned d_version; /* elf version */ 163 } Elf_Data; 164 165 166 /* 167 * Function declarations 168 */ 169 Elf *elf_begin _((int, Elf_Cmd, Elf *)); 170 int elf_cntl _((Elf *, Elf_Cmd)); 171 int elf_end _((Elf *)); 172 const char *elf_errmsg _((int)); 173 int elf_errno _((void)); 174 void elf_fill _((int)); 175 unsigned elf_flagdata _((Elf_Data *, Elf_Cmd, unsigned)); 176 unsigned elf_flagehdr _((Elf *, Elf_Cmd, unsigned)); 177 unsigned elf_flagelf _((Elf *, Elf_Cmd, unsigned)); 178 unsigned elf_flagphdr _((Elf *, Elf_Cmd, unsigned)); 179 unsigned elf_flagscn _((Elf_Scn *, Elf_Cmd, unsigned)); 180 unsigned elf_flagshdr _((Elf_Scn *, Elf_Cmd, unsigned)); 181 size_t elf32_fsize _((Elf_Type, size_t, unsigned)); 182 Elf_Arhdr *elf_getarhdr _((Elf *)); 183 Elf_Arsym *elf_getarsym _((Elf *, size_t *)); 184 off_t elf_getbase _((Elf *)); 185 Elf_Data *elf_getdata _((Elf_Scn *, Elf_Data *)); 186 Elf32_Ehdr *elf32_getehdr _((Elf *)); 187 char *elf_getident _((Elf *, size_t *)); 188 Elf32_Phdr *elf32_getphdr _((Elf *)); 189 Elf_Scn *elf_getscn _((Elf *elf, size_t)); 190 Elf32_Shdr *elf32_getshdr _((Elf_Scn *)); 191 int elf_getphnum _((Elf *, size_t *)); 192 int elf_getphdrnum _((Elf *, size_t *)); 193 int elf_getshnum _((Elf *, size_t *)); 194 int elf_getshdrnum _((Elf *, size_t *)); 195 int elf_getshstrndx _((Elf *, size_t *)); 196 int elf_getshdrstrndx _((Elf *, size_t *)); 197 unsigned long elf_hash _((const char *)); 198 uint_t elf_sys_encoding _((void)); 199 long elf32_checksum _((Elf *)); 200 Elf_Kind elf_kind _((Elf *)); 201 Elf *elf_memory _((char *, size_t)); 202 size_t elf_ndxscn _((Elf_Scn *)); 203 Elf_Data *elf_newdata _((Elf_Scn *)); 204 Elf32_Ehdr *elf32_newehdr _((Elf *)); 205 Elf32_Phdr *elf32_newphdr _((Elf *, size_t)); 206 Elf_Scn *elf_newscn _((Elf *)); 207 Elf_Scn *elf_nextscn _((Elf *, Elf_Scn *)); 208 Elf_Cmd elf_next _((Elf *)); 209 size_t elf_rand _((Elf *, size_t)); 210 Elf_Data *elf_rawdata _((Elf_Scn *, Elf_Data *)); 211 char *elf_rawfile _((Elf *, size_t *)); 212 char *elf_strptr _((Elf *, size_t, size_t)); 213 off_t elf_update _((Elf *, Elf_Cmd)); 214 unsigned elf_version _((unsigned)); 215 Elf_Data *elf32_xlatetof _((Elf_Data *, const Elf_Data *, unsigned)); 216 Elf_Data *elf32_xlatetom _((Elf_Data *, const Elf_Data *, unsigned)); 217 218 #if defined(_LP64) || defined(_LONGLONG_TYPE) 219 size_t elf64_fsize _((Elf_Type, size_t, unsigned)); 220 Elf64_Ehdr *elf64_getehdr _((Elf *)); 221 Elf64_Phdr *elf64_getphdr _((Elf *)); 222 Elf64_Shdr *elf64_getshdr _((Elf_Scn *)); 223 long elf64_checksum _((Elf *)); 224 Elf64_Ehdr *elf64_newehdr _((Elf *)); 225 Elf64_Phdr *elf64_newphdr _((Elf *, size_t)); 226 Elf_Data *elf64_xlatetof _((Elf_Data *, const Elf_Data *, unsigned)); 227 Elf_Data *elf64_xlatetom _((Elf_Data *, const Elf_Data *, unsigned)); 228 #endif /* (defined(_LP64) || defined(_LONGLONG_TYPE) */ 229 230 #undef _ 231 232 #ifdef __cplusplus 233 } 234 #endif 235 236 #endif /* _LIBELF_H */