Current File : //lib/llib-lelf
 /*
 * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
 */ 

/* LINTLIBRARY */
/* PROTOLIB1 */

/*
 * Generic interface definition for usr/src/lib/libelf.
 */

#include <_libelf.h>
#include <nlist.h>
#include <elf_file.h>

/*
 * Elf32 Symbols
 */
size_t		elf32_fsize(Elf_Type, size_t, uint_t);
Elf32_Ehdr	*elf32_getehdr(Elf *);
Elf32_Phdr	*elf32_getphdr(Elf *);
Elf32_Shdr	*elf32_getshdr(Elf_Scn *);
Elf32_Ehdr	*elf32_newehdr(Elf *);
Elf32_Phdr	*elf32_newphdr(Elf *, size_t);
Elf_Data	*elf32_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
Elf_Data	*elf32_xlatetom(Elf_Data *, const Elf_Data *, uint_t);

/*
 * Elf64 Symbols
 */
size_t		elf64_fsize(Elf_Type, size_t, uint_t);
Elf64_Ehdr	*elf64_getehdr(Elf *);
Elf64_Phdr	*elf64_getphdr(Elf *);
Elf64_Shdr	*elf64_getshdr(Elf_Scn *);
Elf64_Ehdr	*elf64_newehdr(Elf *);
Elf64_Phdr	*elf64_newphdr(Elf *, size_t);
Elf_Data	*elf64_xlatetof(Elf_Data *, const Elf_Data *, uint_t);
Elf_Data	*elf64_xlatetom(Elf_Data *, const Elf_Data *, uint_t);

/*
 * GElf Symbols
 */
size_t		gelf_fsize(Elf *, Elf_Type, size_t, uint_t);
int		gelf_getclass(Elf *);
GElf_Ehdr	*gelf_getehdr(Elf *, GElf_Ehdr *);
int		gelf_update_ehdr(Elf *, GElf_Ehdr *);
ulong_t		gelf_newehdr(Elf *, int);
GElf_Phdr	*gelf_getphdr(Elf *, int, GElf_Phdr *);
int		gelf_update_phdr(Elf *, int, GElf_Phdr *);
ulong_t		gelf_newphdr(Elf *, size_t);
GElf_Shdr	*gelf_getshdr(Elf_Scn *,  GElf_Shdr *);
int		gelf_update_shdr(Elf_Scn *, GElf_Shdr *);
Elf_Data	*gelf_xlatetof(Elf *, Elf_Data *, const Elf_Data *, uint_t);
Elf_Data	*gelf_xlatetom(Elf *, Elf_Data *, const Elf_Data *, uint_t);
GElf_Sym	*gelf_getsym(Elf_Data *, int, GElf_Sym *);
int		gelf_update_sym(Elf_Data *, int, GElf_Sym *);
GElf_Syminfo	*gelf_getsyminfo(Elf_Data *, int, GElf_Syminfo *);
int		gelf_update_syminfo(Elf_Data *, int, GElf_Syminfo *);
GElf_Sym	*gelf_getsymshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
		    Elf32_Word *);
int		gelf_update_symshndx(Elf_Data *, Elf_Data *, int, GElf_Sym *,
		    Elf32_Word);
GElf_Move	*gelf_getmove(Elf_Data *, int, GElf_Move *);
int		gelf_update_move(Elf_Data *, int, GElf_Move *);
GElf_Dyn	*gelf_getdyn(Elf_Data *, int, GElf_Dyn *);
int		gelf_update_dyn(Elf_Data *, int, GElf_Dyn *);
GElf_Rela	*gelf_getrela(Elf_Data *, int, GElf_Rela *);
int		gelf_update_rela(Elf_Data *, int, GElf_Rela *);
GElf_Rel	*gelf_getrel(Elf_Data *, int, GElf_Rel *);
int		gelf_update_rel(Elf_Data *, int, GElf_Rel *);
GElf_Cap	*gelf_getcap(Elf_Data *, int, GElf_Cap *);
int		gelf_update_cap(Elf_Data *, int, GElf_Cap *);

/*
 * Class-Independent Elf Symbols
 */
Elf		*elf_begin(int, Elf_Cmd, Elf *);
int		elf_cntl(Elf *, Elf_Cmd);
int		elf_end(Elf *);
const char	*elf_errmsg(int);
int		elf_errno(void);
void		elf_fill(int);
uint_t		elf_flagdata(Elf_Data *, Elf_Cmd, uint_t);
uint_t		elf_flagehdr(Elf *, Elf_Cmd,  uint_t);
uint_t		elf_flagelf(Elf *, Elf_Cmd,  uint_t);
uint_t		elf_flagphdr(Elf *, Elf_Cmd,  uint_t);
uint_t		elf_flagscn(Elf_Scn *, Elf_Cmd, uint_t);
uint_t		elf_flagshdr(Elf_Scn *, Elf_Cmd, uint_t);
Elf_Arhdr	*elf_getarhdr(Elf *);
Elf_Arsym	*elf_getarsym(Elf *, size_t *);
off_t		elf_getbase(Elf *);
Elf_Data	*elf_getdata(Elf_Scn *, Elf_Data *);
char		*elf_getident(Elf *, size_t *);
int		elf_getphnum(Elf *, size_t *);
int		elf_getshnum(Elf *, size_t *);
int		elf_getshstrndx(Elf *, size_t *);
Elf_Scn		*elf_getscn(Elf *elf, size_t);
ulong_t		elf_hash(const char *);
Elf_Kind	elf_kind(Elf *);
Elf		*elf_memory(char *, size_t);
size_t		elf_ndxscn(Elf_Scn *);
Elf_Data	*elf_newdata(Elf_Scn *);
Elf_Scn		*elf_newscn(Elf *);
Elf_Cmd		elf_next(Elf *);
Elf_Scn		*elf_nextscn(Elf *, Elf_Scn *);
size_t		elf_rand(Elf *, size_t);
Elf_Data	*elf_rawdata(Elf_Scn *, Elf_Data *);
char		*elf_rawfile(Elf *, size_t *);
char		*elf_strptr(Elf *, size_t, size_t);
off_t		elf_update(Elf *, Elf_Cmd);
uint_t		elf_version(uint_t);
int		nlist(const char *, struct nlist *);

/*
 * Private Symbols
 */
void		_elf_execfill(_elf_execfill_func_t *);
elf_file_t	_elf_file(const char *, const char *, int, elf_file_ar_t style,
		    int, const char *, size_t);
off_t		_elf_getarhdrbase(Elf *);
size_t		_elf_getarsymwordsize(Elf *);
size_t		_elf_getnextoff(Elf *);
Elf64_Off	_elf_getxoff(Elf_Data *);
void		_elf_set_memalloc(libelf_malloc_func_t *, libelf_free_func_t *,
		    libelf_calloc_func_t *, libelf_calloc_func_t *);
ulong_t		_elf_number(char *, char *, int);
int		_elf_swap_wrimage(Elf *);
uint_t		_elf_sys_encoding(void);

GElf_Xword	_gelf_getdyndtflags_1(Elf *);
int		_gelf_info_is_shndx(GElf_Xword, GElf_Word);

int		elf32_zsec_compress(Elf *, Elf_ZSec_State *, int, char *,
		    size_t, Elf32_Shdr *, const char *, const char *,
		    char **, char **);
int		elf64_zsec_compress(Elf *, Elf_ZSec_State *, int, char *,
		    size_t, Elf64_Shdr *, const char *, const char *,
		    char **, char **);
int		elf32_zsec_compressible(Elf *, Elf_ZSec_Class, Elf_ZSec_Type,
		    const Elf32_Shdr *, const char *);
int		elf64_zsec_compressible(Elf *, Elf_ZSec_Class, Elf_ZSec_Type,
		    const Elf64_Shdr *, const char *);
int		elf32_zsec_decompress(Elf *, Elf_ZSec_State *, Elf32_Shdr *,
		    const char *, const char *, char **, char **);
int		elf64_zsec_decompress(Elf *, Elf_ZSec_State *, Elf64_Shdr *,
		    const char *, const char *, char **, char **);
int		elf32_zsec_identify(Elf *, const Elf32_Shdr *, const char *,
		    const char *, size_t *);
int		elf64_zsec_identify(Elf *, const Elf64_Shdr *, const char *,
		    const char *, size_t *);
Elf_ZSec_State	*elf_zsec_state_alloc(void);
void		elf_zsec_state_free(Elf_ZSec_State *);

int		gelf_zsec_compress(Elf *, Elf_ZSec_State *, int, char *, size_t,
		    GElf_Shdr *, const char *, const char *,
		    char **, char **);
int		gelf_zsec_compressible(Elf *, Elf_ZSec_Class, Elf_ZSec_Type,
		    const GElf_Shdr *, const char *);
int		gelf_zsec_decompress(Elf *, Elf_ZSec_State *, GElf_Shdr *,
		    const char *, const char *, char **, char **);
int		gelf_zsec_identify(Elf *, const GElf_Shdr *, const char *,
		    const char *, size_t *);