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 | |||