1*a1b5ec25Sjsg /*- 2*a1b5ec25Sjsg * Copyright (c) 2006,2008-2010 Joseph Koshy 3*a1b5ec25Sjsg * All rights reserved. 4*a1b5ec25Sjsg * 5*a1b5ec25Sjsg * Redistribution and use in source and binary forms, with or without 6*a1b5ec25Sjsg * modification, are permitted provided that the following conditions 7*a1b5ec25Sjsg * are met: 8*a1b5ec25Sjsg * 1. Redistributions of source code must retain the above copyright 9*a1b5ec25Sjsg * notice, this list of conditions and the following disclaimer. 10*a1b5ec25Sjsg * 2. Redistributions in binary form must reproduce the above copyright 11*a1b5ec25Sjsg * notice, this list of conditions and the following disclaimer in the 12*a1b5ec25Sjsg * documentation and/or other materials provided with the distribution. 13*a1b5ec25Sjsg * 14*a1b5ec25Sjsg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*a1b5ec25Sjsg * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*a1b5ec25Sjsg * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*a1b5ec25Sjsg * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*a1b5ec25Sjsg * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*a1b5ec25Sjsg * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*a1b5ec25Sjsg * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*a1b5ec25Sjsg * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*a1b5ec25Sjsg * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*a1b5ec25Sjsg * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*a1b5ec25Sjsg * SUCH DAMAGE. 25*a1b5ec25Sjsg * 26*a1b5ec25Sjsg * $Id: libelf.h,v 1.1 2019/02/01 05:27:38 jsg Exp $ 27*a1b5ec25Sjsg */ 28*a1b5ec25Sjsg 29*a1b5ec25Sjsg #ifndef _LIBELF_H_ 30*a1b5ec25Sjsg #define _LIBELF_H_ 31*a1b5ec25Sjsg 32*a1b5ec25Sjsg #include <sys/types.h> 33*a1b5ec25Sjsg 34*a1b5ec25Sjsg #include <sys/exec_elf.h> 35*a1b5ec25Sjsg 36*a1b5ec25Sjsg /* Non-standard public data structures */ 37*a1b5ec25Sjsg 38*a1b5ec25Sjsg /* Capability */ 39*a1b5ec25Sjsg typedef struct { 40*a1b5ec25Sjsg Elf32_Word c_tag; 41*a1b5ec25Sjsg union { 42*a1b5ec25Sjsg Elf32_Word c_val; 43*a1b5ec25Sjsg Elf32_Addr c_ptr; 44*a1b5ec25Sjsg } c_un; 45*a1b5ec25Sjsg } Elf32_Cap; 46*a1b5ec25Sjsg 47*a1b5ec25Sjsg typedef struct { 48*a1b5ec25Sjsg Elf64_Xword c_tag; 49*a1b5ec25Sjsg union { 50*a1b5ec25Sjsg Elf64_Xword c_val; 51*a1b5ec25Sjsg Elf64_Addr c_ptr; 52*a1b5ec25Sjsg } c_un; 53*a1b5ec25Sjsg } Elf64_Cap; 54*a1b5ec25Sjsg 55*a1b5ec25Sjsg /* Move */ 56*a1b5ec25Sjsg typedef struct { 57*a1b5ec25Sjsg Elf32_Lword m_value; 58*a1b5ec25Sjsg Elf32_Word m_info; 59*a1b5ec25Sjsg Elf32_Word m_poffset; 60*a1b5ec25Sjsg Elf32_Half m_repeat; 61*a1b5ec25Sjsg Elf32_Half m_stride; 62*a1b5ec25Sjsg } Elf32_Move; 63*a1b5ec25Sjsg 64*a1b5ec25Sjsg typedef struct { 65*a1b5ec25Sjsg Elf64_Lword m_value; 66*a1b5ec25Sjsg Elf64_Xword m_info; 67*a1b5ec25Sjsg Elf64_Xword m_poffset; 68*a1b5ec25Sjsg Elf64_Half m_repeat; 69*a1b5ec25Sjsg Elf64_Half m_stride; 70*a1b5ec25Sjsg } Elf64_Move; 71*a1b5ec25Sjsg 72*a1b5ec25Sjsg /* Syminfo Table */ 73*a1b5ec25Sjsg typedef struct { 74*a1b5ec25Sjsg Elf32_Half si_boundto; 75*a1b5ec25Sjsg Elf32_Half si_flags; 76*a1b5ec25Sjsg } Elf32_Syminfo; 77*a1b5ec25Sjsg 78*a1b5ec25Sjsg typedef struct { 79*a1b5ec25Sjsg Elf64_Half si_boundto; 80*a1b5ec25Sjsg Elf64_Half si_flags; 81*a1b5ec25Sjsg } Elf64_Syminfo; 82*a1b5ec25Sjsg 83*a1b5ec25Sjsg /* Version Definition */ 84*a1b5ec25Sjsg typedef struct { 85*a1b5ec25Sjsg Elf32_Half vd_version; 86*a1b5ec25Sjsg Elf32_Half vd_flags; 87*a1b5ec25Sjsg Elf32_Half vd_ndx; 88*a1b5ec25Sjsg Elf32_Half vd_cnt; 89*a1b5ec25Sjsg Elf32_Word vd_hash; 90*a1b5ec25Sjsg Elf32_Word vd_aux; 91*a1b5ec25Sjsg Elf32_Word vd_next; 92*a1b5ec25Sjsg } Elf32_Verdef; 93*a1b5ec25Sjsg 94*a1b5ec25Sjsg typedef struct { 95*a1b5ec25Sjsg Elf32_Word vda_name; 96*a1b5ec25Sjsg Elf32_Word vda_next; 97*a1b5ec25Sjsg } Elf32_Verdaux; 98*a1b5ec25Sjsg 99*a1b5ec25Sjsg typedef struct { 100*a1b5ec25Sjsg Elf64_Half vd_version; 101*a1b5ec25Sjsg Elf64_Half vd_flags; 102*a1b5ec25Sjsg Elf64_Half vd_ndx; 103*a1b5ec25Sjsg Elf64_Half vd_cnt; 104*a1b5ec25Sjsg Elf64_Word vd_hash; 105*a1b5ec25Sjsg Elf64_Word vd_aux; 106*a1b5ec25Sjsg Elf64_Word vd_next; 107*a1b5ec25Sjsg } Elf64_Verdef; 108*a1b5ec25Sjsg 109*a1b5ec25Sjsg typedef struct { 110*a1b5ec25Sjsg Elf64_Word vda_name; 111*a1b5ec25Sjsg Elf64_Word vda_next; 112*a1b5ec25Sjsg } Elf64_Verdaux; 113*a1b5ec25Sjsg 114*a1b5ec25Sjsg /* Version Dependency */ 115*a1b5ec25Sjsg 116*a1b5ec25Sjsg typedef struct { 117*a1b5ec25Sjsg Elf32_Half vn_version; 118*a1b5ec25Sjsg Elf32_Half vn_cnt; 119*a1b5ec25Sjsg Elf32_Word vn_file; 120*a1b5ec25Sjsg Elf32_Word vn_aux; 121*a1b5ec25Sjsg Elf32_Word vn_next; 122*a1b5ec25Sjsg } Elf32_Verneed; 123*a1b5ec25Sjsg 124*a1b5ec25Sjsg typedef struct { 125*a1b5ec25Sjsg Elf32_Word vna_hash; 126*a1b5ec25Sjsg Elf32_Half vna_flags; 127*a1b5ec25Sjsg Elf32_Half vna_other; 128*a1b5ec25Sjsg Elf32_Word vna_name; 129*a1b5ec25Sjsg Elf32_Word vna_next; 130*a1b5ec25Sjsg } Elf32_Vernaux; 131*a1b5ec25Sjsg 132*a1b5ec25Sjsg typedef struct { 133*a1b5ec25Sjsg Elf64_Half vn_version; 134*a1b5ec25Sjsg Elf64_Half vn_cnt; 135*a1b5ec25Sjsg Elf64_Word vn_file; 136*a1b5ec25Sjsg Elf64_Word vn_aux; 137*a1b5ec25Sjsg Elf64_Word vn_next; 138*a1b5ec25Sjsg } Elf64_Verneed; 139*a1b5ec25Sjsg 140*a1b5ec25Sjsg typedef struct { 141*a1b5ec25Sjsg Elf64_Word vna_hash; 142*a1b5ec25Sjsg Elf64_Half vna_flags; 143*a1b5ec25Sjsg Elf64_Half vna_other; 144*a1b5ec25Sjsg Elf64_Word vna_name; 145*a1b5ec25Sjsg Elf64_Word vna_next; 146*a1b5ec25Sjsg } Elf64_Vernaux; 147*a1b5ec25Sjsg 148*a1b5ec25Sjsg /* GNU-style hash sections */ 149*a1b5ec25Sjsg typedef struct { 150*a1b5ec25Sjsg uint32_t gh_nbuckets; /* Number of hash buckets. */ 151*a1b5ec25Sjsg uint32_t gh_symndx; /* First visible symbol in .dynsym. */ 152*a1b5ec25Sjsg uint32_t gh_maskwords; /* #maskwords used in bloom filter. */ 153*a1b5ec25Sjsg uint32_t gh_shift2; /* Bloom filter shift count. */ 154*a1b5ec25Sjsg } Elf_GNU_Hash_Header; 155*a1b5ec25Sjsg 156*a1b5ec25Sjsg /* Library private data structures */ 157*a1b5ec25Sjsg typedef struct _Elf Elf; 158*a1b5ec25Sjsg typedef struct _Elf_Scn Elf_Scn; 159*a1b5ec25Sjsg 160*a1b5ec25Sjsg /* File types */ 161*a1b5ec25Sjsg typedef enum { 162*a1b5ec25Sjsg ELF_K_NONE = 0, 163*a1b5ec25Sjsg ELF_K_AR, /* `ar' archives */ 164*a1b5ec25Sjsg ELF_K_COFF, /* COFF files (unsupported) */ 165*a1b5ec25Sjsg ELF_K_ELF, /* ELF files */ 166*a1b5ec25Sjsg ELF_K_NUM 167*a1b5ec25Sjsg } Elf_Kind; 168*a1b5ec25Sjsg 169*a1b5ec25Sjsg #define ELF_K_FIRST ELF_K_NONE 170*a1b5ec25Sjsg #define ELF_K_LAST ELF_K_NUM 171*a1b5ec25Sjsg 172*a1b5ec25Sjsg /* Data types */ 173*a1b5ec25Sjsg typedef enum { 174*a1b5ec25Sjsg ELF_T_ADDR, 175*a1b5ec25Sjsg ELF_T_BYTE, 176*a1b5ec25Sjsg ELF_T_CAP, 177*a1b5ec25Sjsg ELF_T_DYN, 178*a1b5ec25Sjsg ELF_T_EHDR, 179*a1b5ec25Sjsg ELF_T_HALF, 180*a1b5ec25Sjsg ELF_T_LWORD, 181*a1b5ec25Sjsg ELF_T_MOVE, 182*a1b5ec25Sjsg ELF_T_MOVEP, 183*a1b5ec25Sjsg ELF_T_NOTE, 184*a1b5ec25Sjsg ELF_T_OFF, 185*a1b5ec25Sjsg ELF_T_PHDR, 186*a1b5ec25Sjsg ELF_T_REL, 187*a1b5ec25Sjsg ELF_T_RELA, 188*a1b5ec25Sjsg ELF_T_SHDR, 189*a1b5ec25Sjsg ELF_T_SWORD, 190*a1b5ec25Sjsg ELF_T_SXWORD, 191*a1b5ec25Sjsg ELF_T_SYMINFO, 192*a1b5ec25Sjsg ELF_T_SYM, 193*a1b5ec25Sjsg ELF_T_VDEF, 194*a1b5ec25Sjsg ELF_T_VNEED, 195*a1b5ec25Sjsg ELF_T_WORD, 196*a1b5ec25Sjsg ELF_T_XWORD, 197*a1b5ec25Sjsg ELF_T_GNUHASH, /* GNU style hash tables. */ 198*a1b5ec25Sjsg ELF_T_NUM 199*a1b5ec25Sjsg } Elf_Type; 200*a1b5ec25Sjsg 201*a1b5ec25Sjsg #define ELF_T_FIRST ELF_T_ADDR 202*a1b5ec25Sjsg #define ELF_T_LAST ELF_T_GNUHASH 203*a1b5ec25Sjsg 204*a1b5ec25Sjsg /* Commands */ 205*a1b5ec25Sjsg typedef enum { 206*a1b5ec25Sjsg ELF_C_NULL = 0, 207*a1b5ec25Sjsg ELF_C_CLR, 208*a1b5ec25Sjsg ELF_C_FDDONE, 209*a1b5ec25Sjsg ELF_C_FDREAD, 210*a1b5ec25Sjsg ELF_C_RDWR, 211*a1b5ec25Sjsg ELF_C_READ, 212*a1b5ec25Sjsg ELF_C_SET, 213*a1b5ec25Sjsg ELF_C_WRITE, 214*a1b5ec25Sjsg ELF_C_NUM 215*a1b5ec25Sjsg } Elf_Cmd; 216*a1b5ec25Sjsg 217*a1b5ec25Sjsg #define ELF_C_FIRST ELF_C_NULL 218*a1b5ec25Sjsg #define ELF_C_LAST ELF_C_NUM 219*a1b5ec25Sjsg 220*a1b5ec25Sjsg /* 221*a1b5ec25Sjsg * An `Elf_Data' structure describes data in an 222*a1b5ec25Sjsg * ELF section. 223*a1b5ec25Sjsg */ 224*a1b5ec25Sjsg typedef struct _Elf_Data { 225*a1b5ec25Sjsg /* 226*a1b5ec25Sjsg * `Public' members that are part of the ELF(3) API. 227*a1b5ec25Sjsg */ 228*a1b5ec25Sjsg uint64_t d_align; 229*a1b5ec25Sjsg void *d_buf; 230*a1b5ec25Sjsg uint64_t d_off; 231*a1b5ec25Sjsg uint64_t d_size; 232*a1b5ec25Sjsg Elf_Type d_type; 233*a1b5ec25Sjsg unsigned int d_version; 234*a1b5ec25Sjsg } Elf_Data; 235*a1b5ec25Sjsg 236*a1b5ec25Sjsg /* 237*a1b5ec25Sjsg * An `Elf_Arhdr' structure describes an archive 238*a1b5ec25Sjsg * header. 239*a1b5ec25Sjsg */ 240*a1b5ec25Sjsg typedef struct { 241*a1b5ec25Sjsg time_t ar_date; 242*a1b5ec25Sjsg char *ar_name; /* archive member name */ 243*a1b5ec25Sjsg gid_t ar_gid; 244*a1b5ec25Sjsg mode_t ar_mode; 245*a1b5ec25Sjsg char *ar_rawname; /* 'raw' member name */ 246*a1b5ec25Sjsg size_t ar_size; 247*a1b5ec25Sjsg uid_t ar_uid; 248*a1b5ec25Sjsg 249*a1b5ec25Sjsg /* 250*a1b5ec25Sjsg * Members that are not part of the public API. 251*a1b5ec25Sjsg */ 252*a1b5ec25Sjsg unsigned int ar_flags; 253*a1b5ec25Sjsg } Elf_Arhdr; 254*a1b5ec25Sjsg 255*a1b5ec25Sjsg /* 256*a1b5ec25Sjsg * An `Elf_Arsym' describes an entry in the archive 257*a1b5ec25Sjsg * symbol table. 258*a1b5ec25Sjsg */ 259*a1b5ec25Sjsg typedef struct { 260*a1b5ec25Sjsg off_t as_off; /* byte offset to member's header */ 261*a1b5ec25Sjsg unsigned long as_hash; /* elf_hash() value for name */ 262*a1b5ec25Sjsg char *as_name; /* null terminated symbol name */ 263*a1b5ec25Sjsg } Elf_Arsym; 264*a1b5ec25Sjsg 265*a1b5ec25Sjsg /* 266*a1b5ec25Sjsg * Error numbers. 267*a1b5ec25Sjsg */ 268*a1b5ec25Sjsg 269*a1b5ec25Sjsg enum Elf_Error { 270*a1b5ec25Sjsg ELF_E_NONE, /* No error */ 271*a1b5ec25Sjsg ELF_E_ARCHIVE, /* Malformed ar(1) archive */ 272*a1b5ec25Sjsg ELF_E_ARGUMENT, /* Invalid argument */ 273*a1b5ec25Sjsg ELF_E_CLASS, /* Mismatched ELF class */ 274*a1b5ec25Sjsg ELF_E_DATA, /* Invalid data descriptor */ 275*a1b5ec25Sjsg ELF_E_HEADER, /* Missing or malformed ELF header */ 276*a1b5ec25Sjsg ELF_E_IO, /* I/O error */ 277*a1b5ec25Sjsg ELF_E_LAYOUT, /* Layout constraint violation */ 278*a1b5ec25Sjsg ELF_E_MODE, /* Wrong mode for ELF descriptor */ 279*a1b5ec25Sjsg ELF_E_RANGE, /* Value out of range */ 280*a1b5ec25Sjsg ELF_E_RESOURCE, /* Resource exhaustion */ 281*a1b5ec25Sjsg ELF_E_SECTION, /* Invalid section descriptor */ 282*a1b5ec25Sjsg ELF_E_SEQUENCE, /* API calls out of sequence */ 283*a1b5ec25Sjsg ELF_E_UNIMPL, /* Feature is unimplemented */ 284*a1b5ec25Sjsg ELF_E_VERSION, /* Unknown API version */ 285*a1b5ec25Sjsg ELF_E_NUM /* Max error number */ 286*a1b5ec25Sjsg }; 287*a1b5ec25Sjsg 288*a1b5ec25Sjsg /* 289*a1b5ec25Sjsg * Flags defined by the API. 290*a1b5ec25Sjsg */ 291*a1b5ec25Sjsg 292*a1b5ec25Sjsg #define ELF_F_LAYOUT 0x001U /* application will layout the file */ 293*a1b5ec25Sjsg #define ELF_F_DIRTY 0x002U /* a section or ELF file is dirty */ 294*a1b5ec25Sjsg 295*a1b5ec25Sjsg /* ELF(3) API extensions. */ 296*a1b5ec25Sjsg #define ELF_F_ARCHIVE 0x100U /* archive creation */ 297*a1b5ec25Sjsg #define ELF_F_ARCHIVE_SYSV 0x200U /* SYSV style archive */ 298*a1b5ec25Sjsg 299*a1b5ec25Sjsg #ifdef __cplusplus 300*a1b5ec25Sjsg extern "C" { 301*a1b5ec25Sjsg #endif 302*a1b5ec25Sjsg Elf *elf_begin(int _fd, Elf_Cmd _cmd, Elf *_elf); 303*a1b5ec25Sjsg int elf_cntl(Elf *_elf, Elf_Cmd _cmd); 304*a1b5ec25Sjsg int elf_end(Elf *_elf); 305*a1b5ec25Sjsg const char *elf_errmsg(int _error); 306*a1b5ec25Sjsg int elf_errno(void); 307*a1b5ec25Sjsg void elf_fill(int _fill); 308*a1b5ec25Sjsg unsigned int elf_flagarhdr(Elf_Arhdr *_arh, Elf_Cmd _cmd, 309*a1b5ec25Sjsg unsigned int _flags); 310*a1b5ec25Sjsg unsigned int elf_flagdata(Elf_Data *_data, Elf_Cmd _cmd, 311*a1b5ec25Sjsg unsigned int _flags); 312*a1b5ec25Sjsg unsigned int elf_flagehdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); 313*a1b5ec25Sjsg unsigned int elf_flagelf(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); 314*a1b5ec25Sjsg unsigned int elf_flagphdr(Elf *_elf, Elf_Cmd _cmd, unsigned int _flags); 315*a1b5ec25Sjsg unsigned int elf_flagscn(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); 316*a1b5ec25Sjsg unsigned int elf_flagshdr(Elf_Scn *_scn, Elf_Cmd _cmd, unsigned int _flags); 317*a1b5ec25Sjsg Elf_Arhdr *elf_getarhdr(Elf *_elf); 318*a1b5ec25Sjsg Elf_Arsym *elf_getarsym(Elf *_elf, size_t *_ptr); 319*a1b5ec25Sjsg off_t elf_getbase(Elf *_elf); 320*a1b5ec25Sjsg Elf_Data *elf_getdata(Elf_Scn *, Elf_Data *); 321*a1b5ec25Sjsg char *elf_getident(Elf *_elf, size_t *_ptr); 322*a1b5ec25Sjsg int elf_getphdrnum(Elf *_elf, size_t *_dst); 323*a1b5ec25Sjsg int elf_getphnum(Elf *_elf, size_t *_dst); /* Deprecated */ 324*a1b5ec25Sjsg Elf_Scn *elf_getscn(Elf *_elf, size_t _index); 325*a1b5ec25Sjsg int elf_getshdrnum(Elf *_elf, size_t *_dst); 326*a1b5ec25Sjsg int elf_getshnum(Elf *_elf, size_t *_dst); /* Deprecated */ 327*a1b5ec25Sjsg int elf_getshdrstrndx(Elf *_elf, size_t *_dst); 328*a1b5ec25Sjsg int elf_getshstrndx(Elf *_elf, size_t *_dst); /* Deprecated */ 329*a1b5ec25Sjsg unsigned long elf_hash(const char *_name); 330*a1b5ec25Sjsg Elf_Kind elf_kind(Elf *_elf); 331*a1b5ec25Sjsg Elf *elf_memory(char *_image, size_t _size); 332*a1b5ec25Sjsg size_t elf_ndxscn(Elf_Scn *_scn); 333*a1b5ec25Sjsg Elf_Data *elf_newdata(Elf_Scn *_scn); 334*a1b5ec25Sjsg Elf_Scn *elf_newscn(Elf *_elf); 335*a1b5ec25Sjsg Elf_Scn *elf_nextscn(Elf *_elf, Elf_Scn *_scn); 336*a1b5ec25Sjsg Elf_Cmd elf_next(Elf *_elf); 337*a1b5ec25Sjsg Elf *elf_open(int _fd); 338*a1b5ec25Sjsg Elf *elf_openmemory(char *_image, size_t _size); 339*a1b5ec25Sjsg off_t elf_rand(Elf *_elf, off_t _off); 340*a1b5ec25Sjsg Elf_Data *elf_rawdata(Elf_Scn *_scn, Elf_Data *_data); 341*a1b5ec25Sjsg char *elf_rawfile(Elf *_elf, size_t *_size); 342*a1b5ec25Sjsg int elf_setshstrndx(Elf *_elf, size_t _shnum); 343*a1b5ec25Sjsg char *elf_strptr(Elf *_elf, size_t _section, size_t _offset); 344*a1b5ec25Sjsg off_t elf_update(Elf *_elf, Elf_Cmd _cmd); 345*a1b5ec25Sjsg unsigned int elf_version(unsigned int _version); 346*a1b5ec25Sjsg 347*a1b5ec25Sjsg long elf32_checksum(Elf *_elf); 348*a1b5ec25Sjsg size_t elf32_fsize(Elf_Type _type, size_t _count, 349*a1b5ec25Sjsg unsigned int _version); 350*a1b5ec25Sjsg Elf32_Ehdr *elf32_getehdr(Elf *_elf); 351*a1b5ec25Sjsg Elf32_Phdr *elf32_getphdr(Elf *_elf); 352*a1b5ec25Sjsg Elf32_Shdr *elf32_getshdr(Elf_Scn *_scn); 353*a1b5ec25Sjsg Elf32_Ehdr *elf32_newehdr(Elf *_elf); 354*a1b5ec25Sjsg Elf32_Phdr *elf32_newphdr(Elf *_elf, size_t _count); 355*a1b5ec25Sjsg Elf_Data *elf32_xlatetof(Elf_Data *_dst, const Elf_Data *_src, 356*a1b5ec25Sjsg unsigned int _enc); 357*a1b5ec25Sjsg Elf_Data *elf32_xlatetom(Elf_Data *_dst, const Elf_Data *_src, 358*a1b5ec25Sjsg unsigned int _enc); 359*a1b5ec25Sjsg 360*a1b5ec25Sjsg long elf64_checksum(Elf *_elf); 361*a1b5ec25Sjsg size_t elf64_fsize(Elf_Type _type, size_t _count, 362*a1b5ec25Sjsg unsigned int _version); 363*a1b5ec25Sjsg Elf64_Ehdr *elf64_getehdr(Elf *_elf); 364*a1b5ec25Sjsg Elf64_Phdr *elf64_getphdr(Elf *_elf); 365*a1b5ec25Sjsg Elf64_Shdr *elf64_getshdr(Elf_Scn *_scn); 366*a1b5ec25Sjsg Elf64_Ehdr *elf64_newehdr(Elf *_elf); 367*a1b5ec25Sjsg Elf64_Phdr *elf64_newphdr(Elf *_elf, size_t _count); 368*a1b5ec25Sjsg Elf_Data *elf64_xlatetof(Elf_Data *_dst, const Elf_Data *_src, 369*a1b5ec25Sjsg unsigned int _enc); 370*a1b5ec25Sjsg Elf_Data *elf64_xlatetom(Elf_Data *_dst, const Elf_Data *_src, 371*a1b5ec25Sjsg unsigned int _enc); 372*a1b5ec25Sjsg #ifdef __cplusplus 373*a1b5ec25Sjsg } 374*a1b5ec25Sjsg #endif 375*a1b5ec25Sjsg 376*a1b5ec25Sjsg #endif /* _LIBELF_H_ */ 377