elf_repl.h   elf_repl.h 
/* /*
elf_repl.h - public header file for systems that lack it. elf_repl.h - public header file for systems that lack it.
Copyright (C) 1995 - 1998 Michael Riepe <michael@stud.uni-hannover.de> Copyright (C) 1995 - 2001 Michael Riepe <michael@stud.uni-hannover.de>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version. version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
/* @(#) $Id: elf_repl.h,v 1.4 1998/06/04 17:14:01 michael Exp $ */ /* @(#) $Id: elf_repl.h,v 1.9 2001/10/05 14:26:34 michael Exp $ */
/* /*
* NEVER INCLUDE THIS FILE DIRECTLY - USE <libelf.h> INSTEAD! * NEVER INCLUDE THIS FILE DIRECTLY - USE <libelf.h> INSTEAD!
*/ */
#ifndef _ELF_REPL_H #ifndef _ELF_REPL_H
#define _ELF_REPL_H #define _ELF_REPL_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
/* /*
* Scalar data types * Scalar data types
*/ */
typedef __libelf_u32_t Elf32_Addr; typedef __libelf_u32_t Elf32_Addr;
typedef __libelf_u16_t Elf32_Half; typedef __libelf_u16_t Elf32_Half;
typedef __libelf_u32_t Elf32_Off; typedef __libelf_u32_t Elf32_Off;
typedef __libelf_i32_t Elf32_Sword; typedef __libelf_i32_t Elf32_Sword;
skipping to change at line 49 skipping to change at line 49
typedef __libelf_i32_t Elf32_Sword; typedef __libelf_i32_t Elf32_Sword;
typedef __libelf_u32_t Elf32_Word; typedef __libelf_u32_t Elf32_Word;
#define ELF32_FSZ_ADDR 4 #define ELF32_FSZ_ADDR 4
#define ELF32_FSZ_HALF 2 #define ELF32_FSZ_HALF 2
#define ELF32_FSZ_OFF 4 #define ELF32_FSZ_OFF 4
#define ELF32_FSZ_SWORD 4 #define ELF32_FSZ_SWORD 4
#define ELF32_FSZ_WORD 4 #define ELF32_FSZ_WORD 4
#if __LIBELF64 #if __LIBELF64
typedef __libelf_u64_t Elf64_Addr; typedef __libelf_u64_t Elf64_Addr;
typedef __libelf_u16_t Elf64_Half; typedef __libelf_u16_t Elf64_Half;
typedef __libelf_u64_t Elf64_Off; typedef __libelf_u64_t Elf64_Off;
typedef __libelf_i32_t Elf64_Sword; typedef __libelf_i32_t Elf64_Sword;
typedef __libelf_i64_t Elf64_Sxword;
typedef __libelf_u32_t Elf64_Word; typedef __libelf_u32_t Elf64_Word;
typedef __libelf_i64_t Elf64_Sxword;
typedef __libelf_u64_t Elf64_Xword; typedef __libelf_u64_t Elf64_Xword;
#define ELF64_FSZ_ADDR 8 #define ELF64_FSZ_ADDR 8
#define ELF64_FSZ_HALF 2 #define ELF64_FSZ_HALF 2
#define ELF64_FSZ_OFF 8 #define ELF64_FSZ_OFF 8
#define ELF64_FSZ_SWORD 4 #define ELF64_FSZ_SWORD 4
#define ELF64_FSZ_SXWORD 8
#define ELF64_FSZ_WORD 4 #define ELF64_FSZ_WORD 4
#define ELF64_FSZ_SXWORD 8
#define ELF64_FSZ_XWORD 8 #define ELF64_FSZ_XWORD 8
/*
* Blame Sun for this...
*/
typedef __libelf_u64_t Elf64_Lword;
typedef __libelf_u64_t Elf32_Lword;
#endif /* __LIBELF64 */ #endif /* __LIBELF64 */
/* /*
* ELF header * ELF header
*/ */
#define EI_NIDENT 16 #define EI_NIDENT 16
typedef struct { typedef struct {
unsigned char e_ident[EI_NIDENT]; unsigned char e_ident[EI_NIDENT];
Elf32_Half e_type; Elf32_Half e_type;
skipping to change at line 117 skipping to change at line 125
/* /*
* e-ident * e-ident
*/ */
#define EI_MAG0 0 #define EI_MAG0 0
#define EI_MAG1 1 #define EI_MAG1 1
#define EI_MAG2 2 #define EI_MAG2 2
#define EI_MAG3 3 #define EI_MAG3 3
#define EI_CLASS 4 #define EI_CLASS 4
#define EI_DATA 5 #define EI_DATA 5
#define EI_VERSION 6 #define EI_VERSION 6
#define EI_PAD 7 #define EI_OSABI 7
#define EI_ABIVERSION 8
#define EI_PAD 9
#define ELFMAG0 0x7f #define ELFMAG0 0x7f
#define ELFMAG1 'E' #define ELFMAG1 'E'
#define ELFMAG2 'L' #define ELFMAG2 'L'
#define ELFMAG3 'F' #define ELFMAG3 'F'
#define ELFMAG "\177ELF" #define ELFMAG "\177ELF"
#define SELFMAG 4 #define SELFMAG 4
#define ELFCLASSNONE 0 #define ELFCLASSNONE 0
#define ELFCLASS32 1 #define ELFCLASS32 1
#define ELFCLASS64 2 #define ELFCLASS64 2
#define ELFCLASSNUM 3 #define ELFCLASSNUM 3
#define ELFDATANONE 0 #define ELFDATANONE 0
#define ELFDATA2LSB 1 #define ELFDATA2LSB 1
#define ELFDATA2MSB 2 #define ELFDATA2MSB 2
#define ELFDATANUM 3 #define ELFDATANUM 3
#define ELFOSABI_SYSV 0 /* UNIX SystemV ABI */
#define ELFOSABI_HPUX 1 /* HP-UX operating system */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* standalone (embedded) application
*/
/* /*
* e_type * e_type
*/ */
#define ET_NONE 0 #define ET_NONE 0
#define ET_REL 1 #define ET_REL 1
#define ET_EXEC 2 #define ET_EXEC 2
#define ET_DYN 3 #define ET_DYN 3
#define ET_CORE 4 #define ET_CORE 4
#define ET_NUM 5 #define ET_NUM 5
#define ET_LOOS 0xfe00
#define ET_HIOS 0xfeff
#define ET_LOPROC 0xff00 #define ET_LOPROC 0xff00
#define ET_HIPROC 0xffff #define ET_HIPROC 0xffff
/* /*
* e_machine * e_machine
*/ */
#define EM_NONE 0 #define EM_NONE 0
#define EM_M32 1 /* AT&T WE 32100 */ #define EM_M32 1 /* AT&T WE 32100 */
#define EM_SPARC 2 /* SPARC */ #define EM_SPARC 2 /* SPARC */
#define EM_386 3 /* Intel i386 */ #define EM_386 3 /* Intel i386 */
#define EM_68K 4 /* Motorola 68000 */ #define EM_68K 4 /* Motorola 68000 */
#define EM_88K 5 /* Motorola 88000 */ #define EM_88K 5 /* Motorola 88000 */
#define EM_486 6 /* Intel i486 (do not use this one) */ #define EM_486 6 /* Intel i486 (do not use this one) */
#define EM_860 7 /* Intel i860 */ #define EM_860 7 /* Intel i860 */
#define EM_MIPS 8 /* MIPS R3000 */ #define EM_MIPS 8 /* MIPS R3000 */
#define EM_NUM 9 #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
#define EM_PARISC 15 /* HP PA-RISC */
#define EM_VPP500 17 /* Fujitsu VPP500 */
#define EM_SPARC32PLUS 18 /* enhanced instruction set SPARC */
#define EM_960 19 /* Intel i960 */
#define EM_PPC 20 /* PowerPC */
#define EM_S390 22 /* IBM S/390 */
#define EM_V800 36 /* NEC V800 */
#define EM_FR20 37 /* Fujitsu FR20 */
#define EM_RH32 38 /* TRW RH-32 */
#define EM_RCE 39 /* Motorola RCE */
#define EM_ARM 40 /* Advanced RISC Machines ARM */
#define EM_ALPHA 41 /* Digital Alpha */
#define EM_SH 42 /* Hitachi SH */
#define EM_SPARCV9 43 /* SPARC Version 9 */
#define EM_TRICORE 44 /* Siemens Tricore embedded CPU */
#define EM_ARC 45 /* Argonaut RISC Core */
#define EM_H8_300 46 /* Hitachi H8/300 */
#define EM_H8_300H 47 /* Hitachi H8/300H */
#define EM_H8S 48 /* Hitachi H8S */
#define EM_H8_500 49 /* Hitachi H8/500 */
#define EM_IA_64 50 /* Intel Merced(tm) CPU */
#define EM_MIPS_X 51 /* Stanford MIPS-X */
#define EM_COLDFIRE 52 /* Motorola Coldfire */
#define EM_64HC12 53 /* Motorola M68HC12 */
#define EM_X8664 60 /* AMD x86-64 */
#define EM_NUM 61
/* /*
* e_ident[EI_VERSION], e_version * e_ident[EI_VERSION], e_version
*/ */
#define EV_NONE 0 #define EV_NONE 0
#define EV_CURRENT 1 #define EV_CURRENT 1
#define EV_NUM 2 #define EV_NUM 2
/* /*
* Section header * Section header
skipping to change at line 207 skipping to change at line 250
} Elf64_Shdr; } Elf64_Shdr;
#endif /* __LIBELF64 */ #endif /* __LIBELF64 */
/* /*
* Special section indices * Special section indices
*/ */
#define SHN_UNDEF 0 #define SHN_UNDEF 0
#define SHN_LORESERVE 0xff00 #define SHN_LORESERVE 0xff00
#define SHN_LOPROC 0xff00 #define SHN_LOPROC 0xff00
#define SHN_HIPROC 0xff1f #define SHN_HIPROC 0xff1f
#define SHN_LOOS 0xff20
#define SHN_HIOS 0xff3f
#define SHN_ABS 0xfff1 #define SHN_ABS 0xfff1
#define SHN_COMMON 0xfff2 #define SHN_COMMON 0xfff2
#define SHN_HIRESERVE 0xffff #define SHN_HIRESERVE 0xffff
/* /*
* sh_type * sh_type
*/ */
#define SHT_NULL 0 #define SHT_NULL 0
#define SHT_PROGBITS 1 #define SHT_PROGBITS 1
#define SHT_SYMTAB 2 #define SHT_SYMTAB 2
#define SHT_STRTAB 3 #define SHT_STRTAB 3
#define SHT_RELA 4 #define SHT_RELA 4
#define SHT_HASH 5 #define SHT_HASH 5
#define SHT_DYNAMIC 6 #define SHT_DYNAMIC 6
#define SHT_NOTE 7 #define SHT_NOTE 7
#define SHT_NOBITS 8 #define SHT_NOBITS 8
#define SHT_REL 9 #define SHT_REL 9
#define SHT_SHLIB 10 #define SHT_SHLIB 10
#define SHT_DYNSYM 11 #define SHT_DYNSYM 11
#define SHT_NUM 12 #define SHT_NUM 12
#define SHT_LOOS 0x60000000
#define SHT_HIOS 0x6fffffff
#define SHT_LOPROC 0x70000000 #define SHT_LOPROC 0x70000000
#define SHT_HIPROC 0x7fffffff #define SHT_HIPROC 0x7fffffff
#define SHT_LOUSER 0x80000000 #define SHT_LOUSER 0x80000000
#define SHT_HIUSER 0xffffffff #define SHT_HIUSER 0xffffffff
/* /*
* Solaris extensions
*/
#define SHT_SUNW_move 0x6ffffffa
#define SHT_SUNW_COMDAT 0x6ffffffb
#define SHT_SUNW_syminfo 0x6ffffffc
#define SHT_SUNW_verdef 0x6ffffffd
#define SHT_SUNW_verneed 0x6ffffffe
#define SHT_SUNW_versym 0x6fffffff
/*
* GNU extensions
*/
#define SHT_GNU_verdef 0x6ffffffd
#define SHT_GNU_verneed 0x6ffffffe
#define SHT_GNU_versym 0x6fffffff
/*
* sh_flags * sh_flags
*/ */
#define SHF_WRITE 0x1 #define SHF_WRITE 0x1
#define SHF_ALLOC 0x2 #define SHF_ALLOC 0x2
#define SHF_EXECINSTR 0x4 #define SHF_EXECINSTR 0x4
#define SHF_MASKOS 0x0f000000
#define SHF_MASKPROC 0xf0000000 #define SHF_MASKPROC 0xf0000000
/* /*
* Symbol table * Symbol table
*/ */
typedef struct { typedef struct {
Elf32_Word st_name; Elf32_Word st_name;
Elf32_Addr st_value; Elf32_Addr st_value;
Elf32_Word st_size; Elf32_Word st_size;
unsigned char st_info; unsigned char st_info;
skipping to change at line 275 skipping to change at line 340
*/ */
#define STN_UNDEF 0 #define STN_UNDEF 0
/* /*
* Macros for manipulating st_info * Macros for manipulating st_info
*/ */
#define ELF32_ST_BIND(i) ((i)>>4) #define ELF32_ST_BIND(i) ((i)>>4)
#define ELF32_ST_TYPE(i) ((i)&0xf) #define ELF32_ST_TYPE(i) ((i)&0xf)
#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
#if __LIBELF64
#define ELF64_ST_BIND(i) ((i)>>4)
#define ELF64_ST_TYPE(i) ((i)&0xf)
#define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
#endif /* __LIBELF64 */
/* /*
* Symbol binding * Symbol binding
*/ */
#define STB_LOCAL 0 #define STB_LOCAL 0
#define STB_GLOBAL 1 #define STB_GLOBAL 1
#define STB_WEAK 2 #define STB_WEAK 2
#define STB_NUM 3 #define STB_NUM 3
#define STB_LOOS 10
#define STB_HIOS 12
#define STB_LOPROC 13 #define STB_LOPROC 13
#define STB_HIPROC 15 #define STB_HIPROC 15
/* /*
* Symbol types * Symbol types
*/ */
#define STT_NOTYPE 0 #define STT_NOTYPE 0
#define STT_OBJECT 1 #define STT_OBJECT 1
#define STT_FUNC 2 #define STT_FUNC 2
#define STT_SECTION 3 #define STT_SECTION 3
#define STT_FILE 4 #define STT_FILE 4
#define STT_NUM 5 #define STT_NUM 5
#define STT_LOOS 10
#define STT_HIOS 12
#define STT_LOPROC 13 #define STT_LOPROC 13
#define STT_HIPROC 15 #define STT_HIPROC 15
/* /*
* Relocation * Relocation
*/ */
typedef struct { typedef struct {
Elf32_Addr r_offset; Elf32_Addr r_offset;
Elf32_Word r_info; Elf32_Word r_info;
} Elf32_Rel; } Elf32_Rel;
skipping to change at line 331 skipping to change at line 406
} Elf64_Rela; } Elf64_Rela;
#endif /* __LIBELF64 */ #endif /* __LIBELF64 */
/* /*
* Macros for manipulating r_info * Macros for manipulating r_info
*/ */
#define ELF32_R_SYM(i) ((i)>>8) #define ELF32_R_SYM(i) ((i)>>8)
#define ELF32_R_TYPE(i) ((unsigned char)(i)) #define ELF32_R_TYPE(i) ((unsigned char)(i))
#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t)) #define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))
#if __LIBELF64
#define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32)
#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
#define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
#endif /* __LIBELF64 */
/* /*
* Note entry header * Note entry header
*/ */
typedef struct { typedef struct {
Elf32_Word n_namesz; /* name size */ Elf32_Word n_namesz; /* name size */
Elf32_Word n_descsz; /* descriptor size */ Elf32_Word n_descsz; /* descriptor size */
Elf32_Word n_type; /* descriptor type */ Elf32_Word n_type; /* descriptor type */
} Elf32_Nhdr; } Elf32_Nhdr;
#if __LIBELF64 && 0 /* I don't know if this is correct */ #if __LIBELF64
/* Solaris and GNU use this layout. Be compatible. */
typedef struct { typedef struct {
Elf64_Word n_namesz; /* name size */ Elf64_Word n_namesz; /* name size */
Elf64_Word n_descsz; /* descriptor size */ Elf64_Word n_descsz; /* descriptor size */
Elf64_Word n_type; /* descriptor type */ Elf64_Word n_type; /* descriptor type */
} Elf64_Nhdr; } Elf64_Nhdr;
#endif /* __LIBELF64 */ #endif /* __LIBELF64 */
/* /*
* Well-known descriptor types for ET_CORE files * Well-known descriptor types for ET_CORE files
*/ */
skipping to change at line 393 skipping to change at line 475
* p_type * p_type
*/ */
#define PT_NULL 0 #define PT_NULL 0
#define PT_LOAD 1 #define PT_LOAD 1
#define PT_DYNAMIC 2 #define PT_DYNAMIC 2
#define PT_INTERP 3 #define PT_INTERP 3
#define PT_NOTE 4 #define PT_NOTE 4
#define PT_SHLIB 5 #define PT_SHLIB 5
#define PT_PHDR 6 #define PT_PHDR 6
#define PT_NUM 7 #define PT_NUM 7
#define PT_LOOS 0x60000000
#define PT_HIOS 0x6fffffff
#define PT_LOPROC 0x70000000 #define PT_LOPROC 0x70000000
#define PT_HIPROC 0x7fffffff #define PT_HIPROC 0x7fffffff
/* /*
* p_flags * p_flags
*/ */
#define PF_R 0x4 #define PF_R 0x4
#define PF_W 0x2 #define PF_W 0x2
#define PF_X 0x1 #define PF_X 0x1
#define PF_MASKOS 0x0ff00000
#define PF_MASKPROC 0xf0000000 #define PF_MASKPROC 0xf0000000
/* /*
* Dynamic structure * Dynamic structure
*/ */
typedef struct { typedef struct {
Elf32_Sword d_tag; Elf32_Sword d_tag;
union { union {
Elf32_Word d_val; Elf32_Word d_val;
Elf32_Addr d_ptr; Elf32_Addr d_ptr;
skipping to change at line 452 skipping to change at line 537
#define DT_SONAME 14 #define DT_SONAME 14
#define DT_RPATH 15 #define DT_RPATH 15
#define DT_SYMBOLIC 16 #define DT_SYMBOLIC 16
#define DT_REL 17 #define DT_REL 17
#define DT_RELSZ 18 #define DT_RELSZ 18
#define DT_RELENT 19 #define DT_RELENT 19
#define DT_PLTREL 20 #define DT_PLTREL 20
#define DT_DEBUG 21 #define DT_DEBUG 21
#define DT_TEXTREL 22 #define DT_TEXTREL 22
#define DT_JMPREL 23 #define DT_JMPREL 23
#define DT_NUM 24 #define DT_BIND_NOW 24
#define DT_INIT_ARRAY 25
#define DT_FINI_ARRAY 26
#define DT_INIT_ARRAYSZ 27
#define DT_FINI_ARRAYSZ 28
#define DT_NUM 29
#define DT_LOOS 0x60000000
#define DT_HIOS 0x6fffffff
#define DT_LOPROC 0x70000000 #define DT_LOPROC 0x70000000
#define DT_HIPROC 0x7fffffff #define DT_HIPROC 0x7fffffff
#ifdef __cplusplus /*
* Solaris extensions
*/
#define DT_VALRNGLO 0x6ffffd00
#define DT_CHECKSUM 0x6ffffdf8
#define DT_PLTPADSZ 0x6ffffdf9
#define DT_MOVEENT 0x6ffffdfa
#define DT_MOVESZ 0x6ffffdfb
#define DT_FEATURE_1 0x6ffffdfc
#define DT_POSFLAG_1 0x6ffffdfd
#define DT_SYMINSZ 0x6ffffdfe
#define DT_SYMINENT 0x6ffffdff
#define DT_VALRNGHI 0x6ffffdff
#define DT_ADDRRNGLO 0x6ffffe00
#define DT_CONFIG 0x6ffffefa
#define DT_DEPAUDIT 0x6ffffefb
#define DT_AUDIT 0x6ffffefc
#define DT_PLTPAD 0x6ffffefd
#define DT_MOVETAB 0x6ffffefe
#define DT_SYMINFO 0x6ffffeff
#define DT_ADDRRNGHI 0x6ffffeff
#define DT_RELACOUNT 0x6ffffff9
#define DT_RELCOUNT 0x6ffffffa
#define DT_FLAGS_1 0x6ffffffb
#define DT_VERDEF 0x6ffffffc
#define DT_VERDEFNUM 0x6ffffffd
#define DT_VERNEED 0x6ffffffe
#define DT_VERNEEDNUM 0x6fffffff
#define DT_AUXILIARY 0x7ffffffd
#define DT_USED 0x7ffffffe
#define DT_FILTER 0x7fffffff
/*
* GNU extensions
*/
#define DT_VERSYM 0x6ffffff0
/*
* DT_FEATURE_1 values
*/
#define DTF_1_PARINIT 0x1
#define DTF_1_CONFEXP 0x2
/*
* DT_POSFLAG_1 values
*/
#define DF_P1_LAZYLOAD 0x1
#define DF_P1_GROUPPERM 0x2
/*
* DT_FLAGS_1 values
*/
#define DF_1_NOW 0x00000001
#define DF_1_GLOBAL 0x00000002
#define DF_1_GROUP 0x00000004
#define DF_1_NODELETE 0x00000008
#define DF_1_LOADFLTR 0x00000010
#define DF_1_INITFIRST 0x00000020
#define DF_1_NOOPEN 0x00000040
#define DF_1_ORIGIN 0x00000080
#define DF_1_DIRECT 0x00000100
#define DF_1_TRANS 0x00000200
#define DF_1_INTERPOSE 0x00000400
#define DF_1_NODEFLIB 0x00000800
#define DF_1_NODUMP 0x00001000
#define DF_1_CONFALT 0x00002000
#define DF_1_ENDFILTEE 0x00004000
#define DF_1_DISPRELDNE 0x00008000
#define DF_1_DISPRELPND 0x00010000
/*
* Syminfo structure
*/
typedef struct {
Elf32_Half si_boundto;
Elf32_Half si_flags;
} Elf32_Syminfo;
#if __LIBELF64
typedef struct {
Elf64_Half si_boundto;
Elf64_Half si_flags;
} Elf64_Syminfo;
#endif /* __LIBELF64 */
/*
* Syminfo version (stored in unused first entry)
*/
#define SYMINFO_NONE 0
#define SYMINFO_CURRENT 1
#define SYMINFO_NUM 2
/*
* si_boundto special values
*/
#define SYMINFO_BT_LOWRESERVE 0xff00
#define SYMINFO_BT_PARENT 0xfffe /* bound to parent */
#define SYMINFO_BT_SELF 0xffff /* bound to self */
/*
* si_flags
*/
#define SYMINFO_FLG_DIRECT 0x01 /* bound to an object */
#define SYMINFO_FLG_PASSTHRU 0x02 /* pass-thru symbol */
#define SYMINFO_FLG_COPY 0x04 /* result of a copy relocation */
#define SYMINFO_FLG_LAZYLOAD 0x08 /* bound to lazy-loaded object */
/*
* Version definitions
*/
typedef struct {
Elf32_Half vd_version;
Elf32_Half vd_flags;
Elf32_Half vd_ndx;
Elf32_Half vd_cnt;
Elf32_Word vd_hash;
Elf32_Word vd_aux;
Elf32_Word vd_next;
} Elf32_Verdef;
typedef struct {
Elf32_Word vda_name;
Elf32_Word vda_next;
} Elf32_Verdaux;
typedef struct {
Elf32_Half vn_version;
Elf32_Half vn_cnt;
Elf32_Word vn_file;
Elf32_Word vn_aux;
Elf32_Word vn_next;
} Elf32_Verneed;
typedef struct {
Elf32_Word vna_hash;
Elf32_Half vna_flags;
Elf32_Half vna_other;
Elf32_Word vna_name;
Elf32_Word vna_next;
} Elf32_Vernaux;
typedef Elf32_Half Elf32_Versym;
#if __LIBELF64
typedef struct {
Elf64_Half vd_version;
Elf64_Half vd_flags;
Elf64_Half vd_ndx;
Elf64_Half vd_cnt;
Elf64_Word vd_hash;
Elf64_Word vd_aux;
Elf64_Word vd_next;
} Elf64_Verdef;
typedef struct {
Elf64_Word vda_name;
Elf64_Word vda_next;
} Elf64_Verdaux;
typedef struct {
Elf64_Half vn_version;
Elf64_Half vn_cnt;
Elf64_Word vn_file;
Elf64_Word vn_aux;
Elf64_Word vn_next;
} Elf64_Verneed;
typedef struct {
Elf64_Word vna_hash;
Elf64_Half vna_flags;
Elf64_Half vna_other;
Elf64_Word vna_name;
Elf64_Word vna_next;
} Elf64_Vernaux;
typedef Elf64_Half Elf64_Versym;
#endif /* __LIBELF64 */
/*
* vd_version
*/
#define VER_DEF_NONE 0
#define VER_DEF_CURRENT 1
#define VER_DEF_NUM 2
/*
* vn_version
*/
#define VER_NEED_NONE 0
#define VER_NEED_CURRENT 1
#define VER_NEED_NUM 2
/*
* vd_flags / vna_flags
*/
#define VER_FLG_BASE 0x1 /* vd_flags only */
#define VER_FLG_WEAK 0x2
/*
* Elf*_Versym special values
*/
#define VER_NDX_LOCAL 0
#define VER_NDX_GLOBAL 1
/*
* Move section
*/
#if __LIBELF64
typedef struct {
Elf32_Lword m_value;
Elf32_Word m_info;
Elf32_Word m_poffset;
Elf32_Half m_repeat;
Elf32_Half m_stride;
} Elf32_Move;
typedef struct {
Elf64_Lword m_value;
Elf64_Xword m_info;
Elf64_Xword m_poffset;
Elf64_Half m_repeat;
Elf64_Half m_stride;
} Elf64_Move;
#define ELF32_M_SYM(info) ((info)>>8)
#define ELF32_M_SIZE(info) ((unsigned char)(info))
#define ELF32_M_INFO(sym, sz) (((sym)<<8)+(unsigned char)(sz))
#define ELF64_M_SYM(info) ((Elf64_Xword)(info)>>8)
#define ELF64_M_SIZE(info) ((unsigned char)(info))
#define ELF64_M_INFO(sym, sz) (((Elf64_Xword)(sym)<<8)+(unsigned char)(sz)
)
#endif /* __LIBELF64 */
#ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* _ELF_REPL_H */ #endif /* _ELF_REPL_H */
 End of changes. 26 change blocks. 
10 lines changed or deleted 344 lines changed or added


 libelf.h   libelf.h 
/* #include <libelf/libelf.h>
libelf.h - public header file for libelf.
Copyright (C) 1995 - 1998 Michael Riepe <michael@stud.uni-hannover.de>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* @(#) $Id: libelf.h,v 1.5 1998/06/01 19:47:18 michael Exp $ */
#ifndef _LIBELF_H
#define _LIBELF_H
#include <sys/types.h>
#if __LIBELF_INTERNAL__
#include <sys_elf.h>
#else /* __LIBELF_INTERNAL__ */
#include <libelf/sys_elf.h>
#endif /* __LIBELF_INTERNAL__ */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef __P
# if __STDC__ || defined(__cplusplus)
# define __P(args) args
# else /* __STDC__ || defined(__cplusplus) */
# define __P(args) ()
# endif /* __STDC__ || defined(__cplusplus) */
#endif /* __P */
/*
* Commands
*/
typedef enum {
ELF_C_NULL = 0, /* must be first, 0 */
ELF_C_READ,
ELF_C_WRITE,
ELF_C_CLR,
ELF_C_SET,
ELF_C_FDDONE,
ELF_C_FDREAD,
ELF_C_RDWR,
ELF_C_NUM /* must be last */
} Elf_Cmd;
/*
* Flags
*/
#define ELF_F_DIRTY 0x1
#define ELF_F_LAYOUT 0x4
/*
* File types
*/
typedef enum {
ELF_K_NONE = 0, /* must be first, 0 */
ELF_K_AR,
ELF_K_COFF,
ELF_K_ELF,
ELF_K_NUM /* must be last */
} Elf_Kind;
/*
* Data types
*/
typedef enum {
ELF_T_BYTE = 0, /* must be first, 0 */
ELF_T_ADDR,
ELF_T_DYN,
ELF_T_EHDR,
ELF_T_HALF,
ELF_T_OFF,
ELF_T_PHDR,
ELF_T_RELA,
ELF_T_REL,
ELF_T_SHDR,
ELF_T_SWORD,
ELF_T_SYM,
ELF_T_WORD,
/*
* New stuff for 64-bit.
*
* Most implementations add ELF_T_SXWORD after ELF_T_SWORD
* which breaks binary compatibility with earlier versions.
* If this causes problems for you, contact me.
*/
ELF_T_SXWORD,
ELF_T_XWORD,
ELF_T_NUM /* must be last */
} Elf_Type;
/*
* Elf descriptor
*/
typedef struct Elf Elf;
/*
* Section descriptor
*/
typedef struct Elf_Scn Elf_Scn;
/*
* Archive member header
*/
typedef struct {
char* ar_name;
time_t ar_date;
long ar_uid;
long ar_gid;
unsigned long ar_mode;
off_t ar_size;
char* ar_rawname;
} Elf_Arhdr;
/*
* Archive symbol table
*/
typedef struct {
char* as_name;
size_t as_off;
unsigned long as_hash;
} Elf_Arsym;
/*
* Data descriptor
*/
typedef struct {
void* d_buf;
Elf_Type d_type;
size_t d_size;
off_t d_off;
size_t d_align;
unsigned d_version;
} Elf_Data;
/*
* Function declarations
*/
extern Elf *elf_begin __P((int __fd, Elf_Cmd __cmd, Elf *__ref));
extern Elf *elf_memory __P((char *__image, size_t __size));
extern int elf_cntl __P((Elf *__elf, Elf_Cmd __cmd));
extern int elf_end __P((Elf *__elf));
extern const char *elf_errmsg __P((int __err));
extern int elf_errno __P((void));
extern void elf_fill __P((int __fill));
extern unsigned elf_flagdata __P((Elf_Data *__data, Elf_Cmd __cmd,
unsigned __flags));
extern unsigned elf_flagehdr __P((Elf *__elf, Elf_Cmd __cmd,
unsigned __flags));
extern unsigned elf_flagelf __P((Elf *__elf, Elf_Cmd __cmd,
unsigned __flags));
extern unsigned elf_flagphdr __P((Elf *__elf, Elf_Cmd __cmd,
unsigned __flags));
extern unsigned elf_flagscn __P((Elf_Scn *__scn, Elf_Cmd __cmd,
unsigned __flags));
extern unsigned elf_flagshdr __P((Elf_Scn *__scn, Elf_Cmd __cmd,
unsigned __flags));
extern size_t elf32_fsize __P((Elf_Type __type, size_t __count,
unsigned __ver));
extern Elf_Arhdr *elf_getarhdr __P((Elf *__elf));
extern Elf_Arsym *elf_getarsym __P((Elf *__elf, size_t *__ptr));
extern off_t elf_getbase __P((Elf *__elf));
extern Elf_Data *elf_getdata __P((Elf_Scn *__scn, Elf_Data *__data));
extern Elf32_Ehdr *elf32_getehdr __P((Elf *__elf));
extern char *elf_getident __P((Elf *__elf, size_t *__ptr));
extern Elf32_Phdr *elf32_getphdr __P((Elf *__elf));
extern Elf_Scn *elf_getscn __P((Elf *__elf, size_t __index));
extern Elf32_Shdr *elf32_getshdr __P((Elf_Scn *__scn));
extern unsigned long elf_hash __P((const char *__name));
extern Elf_Kind elf_kind __P((Elf *__elf));
extern size_t elf_ndxscn __P((Elf_Scn *__scn));
extern Elf_Data *elf_newdata __P((Elf_Scn *__scn));
extern Elf32_Ehdr *elf32_newehdr __P((Elf *__elf));
extern Elf32_Phdr *elf32_newphdr __P((Elf *__elf, size_t __count));
extern Elf_Scn *elf_newscn __P((Elf *__elf));
extern Elf_Cmd elf_next __P((Elf *__elf));
extern Elf_Scn *elf_nextscn __P((Elf *__elf, Elf_Scn *__scn));
extern size_t elf_rand __P((Elf *__elf, size_t __offset));
extern Elf_Data *elf_rawdata __P((Elf_Scn *__scn, Elf_Data *__data));
extern char *elf_rawfile __P((Elf *__elf, size_t *__ptr));
extern char *elf_strptr __P((Elf *__elf, size_t __section, size_t __offset)
);
extern off_t elf_update __P((Elf *__elf, Elf_Cmd __cmd));
extern unsigned elf_version __P((unsigned __ver));
extern Elf_Data *elf32_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src
,
unsigned __encode));
extern Elf_Data *elf32_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src
,
unsigned __encode));
#if __LIBELF64
/*
* 64-bit ELF functions
* Not available on all platforms
*/
extern Elf64_Ehdr *elf64_getehdr __P((Elf *__elf));
extern Elf64_Ehdr *elf64_newehdr __P((Elf *__elf));
extern Elf64_Phdr *elf64_getphdr __P((Elf *__elf));
extern Elf64_Phdr *elf64_newphdr __P((Elf *__elf, size_t __count));
extern Elf64_Shdr *elf64_getshdr __P((Elf_Scn *__scn));
extern size_t elf64_fsize __P((Elf_Type __type, size_t __count,
unsigned __ver));
extern Elf_Data *elf64_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src
,
unsigned __encode));
extern Elf_Data *elf64_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src
,
unsigned __encode));
#endif /* __LIBELF64 */
/*
* More function declarations
* These functions are NOT available
* in the SYSV version of libelf!
*/
extern size_t elf_delscn __P((Elf *__elf, Elf_Scn *__scn));
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _LIBELF_H */
 End of changes. 1 change blocks. 
lines changed or deleted lines changed or added


 sys_elf.h   sys_elf.h 
/* lib/sys_elf.h. Generated automatically by configure. */ /* lib/sys_elf.h. Generated automatically by configure. */
/* /*
sys_elf.h.in - configure template for private "switch" file. sys_elf.h.in - configure template for private "switch" file.
Copyright (C) 1998 Michael Riepe <michael@stud.uni-hannover.de> Copyright (C) 1998 - 2001 Michael Riepe <michael@stud.uni-hannover.de>
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version. version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details. Library General Public License for more details.
You should have received a copy of the GNU Library General Public You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free Software License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/ */
/* @(#) $Id: sys_elf.h.in,v 1.3 1998/06/04 15:26:48 michael Exp $ */ /* @(#) $Id: sys_elf.h.in,v 1.8 2001/10/05 19:05:25 michael Exp $ */
/* /*
* DO NOT USE THIS IN APPLICATIONS - #include <libelf.h> INSTEAD! * DO NOT USE THIS IN APPLICATIONS - #include <libelf.h> INSTEAD!
*/ */
/* Define to `<elf.h>' or `<sys/elf.h>' if one of them is present */ /* Define to `<elf.h>' or `<sys/elf.h>' if one of them is present */
#define __LIBELF_HEADER_ELF_H <elf.h> #define __LIBELF_HEADER_ELF_H <elf.h>
/* Define if Elf32_Dyn is declared in <link.h> */
/* #undef __LIBELF_NEED_LINK_H */
/* Define if you want 64-bit support (and your system supports it) */ /* Define if you want 64-bit support (and your system supports it) */
#define __LIBELF64 1 #define __LIBELF64 1
/* Define if you want 64-bit support, and are running IRIX */ /* Define if you want 64-bit support, and are running IRIX */
/* #undef __LIBELF64_IRIX */ /* #undef __LIBELF64_IRIX */
/* Define if you want 64-bit support, and are running Linux */ /* Define if you want 64-bit support, and are running Linux */
/* #undef __LIBELF64_LINUX */ /* #undef __LIBELF64_LINUX */
/* Define if you want symbol versioning (and your system supports it) */
#define __LIBELF_SYMBOL_VERSIONS 1
/* Define to a 64-bit signed integer type if one exists */ /* Define to a 64-bit signed integer type if one exists */
#define __libelf_i64_t long long #define __libelf_i64_t long long
/* Define to a 64-bit unsigned integer type if one exists */ /* Define to a 64-bit unsigned integer type if one exists */
#define __libelf_u64_t unsigned long long #define __libelf_u64_t unsigned long long
/* Define to a 32-bit signed integer type if one exists */ /* Define to a 32-bit signed integer type if one exists */
#define __libelf_i32_t long #define __libelf_i32_t long
/* Define to a 32-bit unsigned integer type if one exists */ /* Define to a 32-bit unsigned integer type if one exists */
skipping to change at line 71 skipping to change at line 77
# include __LIBELF_HEADER_ELF_H # include __LIBELF_HEADER_ELF_H
#else /* __LIBELF_HEADER_ELF_H */ #else /* __LIBELF_HEADER_ELF_H */
# if __LIBELF_INTERNAL__ # if __LIBELF_INTERNAL__
# include <elf_repl.h> # include <elf_repl.h>
# else /* __LIBELF_INTERNAL__ */ # else /* __LIBELF_INTERNAL__ */
# include <libelf/elf_repl.h> # include <libelf/elf_repl.h>
# endif /* __LIBELF_INTERNAL__ */ # endif /* __LIBELF_INTERNAL__ */
#endif /* __LIBELF_HEADER_ELF_H */ #endif /* __LIBELF_HEADER_ELF_H */
/* /*
* Workaround for broken <elf.h> on Linux... * On some systems, <elf.h> is severely broken. Try to fix it.
*/ */
#if __LIBELF64 && __LIBELF64_LINUX #ifdef __LIBELF_HEADER_ELF_H
# ifndef ELF32_FSZ_ADDR
# define ELF32_FSZ_ADDR 4
# define ELF32_FSZ_HALF 2
# define ELF32_FSZ_OFF 4
# define ELF32_FSZ_SWORD 4
# define ELF32_FSZ_WORD 4
# endif /* ELF32_FSZ_ADDR */
# ifndef STN_UNDEF
# define STN_UNDEF 0
# endif /* STN_UNDEF */
# if __LIBELF64
# ifndef ELF64_FSZ_ADDR
# define ELF64_FSZ_ADDR 8
# define ELF64_FSZ_HALF 2
# define ELF64_FSZ_OFF 8
# define ELF64_FSZ_SWORD 4
# define ELF64_FSZ_WORD 4
# define ELF64_FSZ_SXWORD 8
# define ELF64_FSZ_XWORD 8
# endif /* ELF64_FSZ_ADDR */
# ifndef ELF64_ST_BIND
# define ELF64_ST_BIND(i) ((i)>>4)
# define ELF64_ST_TYPE(i) ((i)&0xf)
# define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
# endif /* ELF64_ST_BIND */
# ifndef ELF64_R_SYM
# define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32)
# define ELF64_R_TYPE(i) ((i)&0xffffffffL)
# define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
# endif /* ELF64_R_SYM */
# if __LIBELF64_LINUX
typedef __libelf_u64_t Elf64_Addr; typedef __libelf_u64_t Elf64_Addr;
typedef __libelf_u16_t Elf64_Half; typedef __libelf_u16_t Elf64_Half;
typedef __libelf_u64_t Elf64_Off; typedef __libelf_u64_t Elf64_Off;
typedef __libelf_i32_t Elf64_Sword; typedef __libelf_i32_t Elf64_Sword;
typedef __libelf_i64_t Elf64_Sxword;
typedef __libelf_u32_t Elf64_Word; typedef __libelf_u32_t Elf64_Word;
typedef __libelf_i64_t Elf64_Sxword;
typedef __libelf_u64_t Elf64_Xword; typedef __libelf_u64_t Elf64_Xword;
#endif /* __LIBELF64 && __LIBELF64_LINUX */ # endif /* __LIBELF64_LINUX */
# endif /* __LIBELF64 */
#endif /* __LIBELF_HEADER_ELF_H */
 End of changes. 9 change blocks. 
5 lines changed or deleted 49 lines changed or added

This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/