elf.h revision 11cd02dfb91661c65134cac258cf5924270e9d2
111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**************************************************************************** 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** This header was automatically generated from a Linux kernel header 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** of the same name, to make information necessary for userspace to 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** call into the kernel available to libc. It contains only constants, 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** structures, and macros generated from the original header, and thus, 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** contains no copyrightable information. 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *** 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert **************************************************************************** 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ****************************************************************************/ 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _LINUX_ELF_H 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _LINUX_ELF_H 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/types.h> 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/auxvec.h> 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <linux/elf-em.h> 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <asm/elf.h> 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef elf_read_implies_exec 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elf_read_implies_exec(ex, have_pt_gnu_stack) 0 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u32 Elf32_Addr; 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u16 Elf32_Half; 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u32 Elf32_Off; 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __s32 Elf32_Sword; 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u32 Elf32_Word; 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u64 Elf64_Addr; 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u16 Elf64_Half; 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __s16 Elf64_SHalf; 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u64 Elf64_Off; 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __s32 Elf64_Sword; 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u32 Elf64_Word; 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __u64 Elf64_Xword; 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __s64 Elf64_Sxword; 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_NULL 0 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_LOAD 1 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_DYNAMIC 2 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_INTERP 3 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_NOTE 4 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_SHLIB 5 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_PHDR 6 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_TLS 7 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_LOOS 0x60000000 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_HIOS 0x6fffffff 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_LOPROC 0x70000000 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_HIPROC 0x7fffffff 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_GNU_EH_FRAME 0x6474e550 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PT_GNU_STACK (PT_LOOS + 0x474e551) 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_NONE 0 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_REL 1 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_EXEC 2 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_DYN 3 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_CORE 4 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_LOPROC 0xff00 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ET_HIPROC 0xffff 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_NULL 0 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_NEEDED 1 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_PLTRELSZ 2 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_PLTGOT 3 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_HASH 4 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_STRTAB 5 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_SYMTAB 6 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RELA 7 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RELASZ 8 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RELAENT 9 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_STRSZ 10 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_SYMENT 11 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_INIT 12 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_FINI 13 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_SONAME 14 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RPATH 15 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_SYMBOLIC 16 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_REL 17 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RELSZ 18 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_RELENT 19 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_PLTREL 20 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_DEBUG 21 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_TEXTREL 22 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_JMPREL 23 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_LOPROC 0x70000000 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define DT_HIPROC 0x7fffffff 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STB_LOCAL 0 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STB_GLOBAL 1 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STB_WEAK 2 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_NOTYPE 0 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_OBJECT 1 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_FUNC 2 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_SECTION 3 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_FILE 4 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_COMMON 5 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define STT_TLS 6 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF_ST_BIND(x) ((x) >> 4) 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf) 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF32_ST_BIND(x) ELF_ST_BIND(x) 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF32_ST_TYPE(x) ELF_ST_TYPE(x) 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF64_ST_BIND(x) ELF_ST_BIND(x) 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF64_ST_TYPE(x) ELF_ST_TYPE(x) 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct dynamic{ 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Sword d_tag; 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union{ 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Sword d_val; 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr d_ptr; 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } d_un; 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Dyn; 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Sxword d_tag; 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert union { 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword d_val; 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr d_ptr; 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } d_un; 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Dyn; 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF32_R_SYM(x) ((x) >> 8) 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF32_R_TYPE(x) ((x) & 0xff) 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF64_R_SYM(i) ((i) >> 32) 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF64_R_TYPE(i) ((i) & 0xffffffff) 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_rel { 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr r_offset; 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word r_info; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Rel; 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_rel { 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr r_offset; 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword r_info; 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Rel; 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_rela{ 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr r_offset; 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word r_info; 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Sword r_addend; 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Rela; 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_rela { 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr r_offset; 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword r_info; 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Sxword r_addend; 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Rela; 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_sym{ 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word st_name; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr st_value; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word st_size; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char st_info; 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char st_other; 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half st_shndx; 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Sym; 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_sym { 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word st_name; 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char st_info; 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char st_other; 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half st_shndx; 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr st_value; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword st_size; 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Sym; 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_NIDENT 16 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_hdr{ 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char e_ident[EI_NIDENT]; 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_type; 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_machine; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word e_version; 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr e_entry; 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Off e_phoff; 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Off e_shoff; 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word e_flags; 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_ehsize; 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_phentsize; 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_phnum; 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_shentsize; 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_shnum; 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Half e_shstrndx; 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Ehdr; 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_hdr { 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert unsigned char e_ident[16]; 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_type; 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_machine; 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word e_version; 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr e_entry; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Off e_phoff; 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Off e_shoff; 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word e_flags; 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_ehsize; 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_phentsize; 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_phnum; 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_shentsize; 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_shnum; 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Half e_shstrndx; 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Ehdr; 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PF_R 0x4 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PF_W 0x2 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define PF_X 0x1 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_phdr{ 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word p_type; 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Off p_offset; 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr p_vaddr; 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr p_paddr; 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word p_filesz; 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word p_memsz; 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word p_flags; 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word p_align; 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Phdr; 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_phdr { 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word p_type; 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word p_flags; 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Off p_offset; 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr p_vaddr; 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr p_paddr; 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword p_filesz; 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword p_memsz; 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword p_align; 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Phdr; 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_NULL 0 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_PROGBITS 1 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_SYMTAB 2 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_STRTAB 3 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_RELA 4 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_HASH 5 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_DYNAMIC 6 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_NOTE 7 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_NOBITS 8 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_REL 9 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_SHLIB 10 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_DYNSYM 11 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_NUM 12 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_LOPROC 0x70000000 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_HIPROC 0x7fffffff 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_LOUSER 0x80000000 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHT_HIUSER 0xffffffff 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHF_WRITE 0x1 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHF_ALLOC 0x2 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHF_EXECINSTR 0x4 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHF_MASKPROC 0xf0000000 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_UNDEF 0 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_LORESERVE 0xff00 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_LOPROC 0xff00 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_HIPROC 0xff1f 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_ABS 0xfff1 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_COMMON 0xfff2 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SHN_HIRESERVE 0xffff 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_name; 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_type; 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_flags; 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Addr sh_addr; 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Off sh_offset; 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_size; 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_link; 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_info; 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_addralign; 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word sh_entsize; 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Shdr; 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_shdr { 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word sh_name; 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word sh_type; 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword sh_flags; 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Addr sh_addr; 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Off sh_offset; 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword sh_size; 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word sh_link; 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word sh_info; 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword sh_addralign; 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Xword sh_entsize; 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Shdr; 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_MAG0 0 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_MAG1 1 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_MAG2 2 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_MAG3 3 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_CLASS 4 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_DATA 5 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_VERSION 6 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_OSABI 7 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EI_PAD 8 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFMAG0 0x7f 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFMAG1 'E' 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFMAG2 'L' 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFMAG3 'F' 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFMAG "\177ELF" 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define SELFMAG 4 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFCLASSNONE 0 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFCLASS32 1 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFCLASS64 2 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFCLASSNUM 3 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFDATANONE 0 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFDATA2LSB 1 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFDATA2MSB 2 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_NONE 0 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_CURRENT 1 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define EV_NUM 2 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFOSABI_NONE 0 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELFOSABI_LINUX 3 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef ELF_OSABI 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ELF_OSABI ELFOSABI_NONE 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_PRSTATUS 1 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_PRFPREG 2 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_PRPSINFO 3 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_TASKSTRUCT 4 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_AUXV 6 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define NT_PRXFPREG 0x46e62b7f 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf32_note { 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word n_namesz; 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word n_descsz; 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf32_Word n_type; 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf32_Nhdr; 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct elf64_note { 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word n_namesz; 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word n_descsz; 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert Elf64_Word n_type; 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} Elf64_Nhdr; 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if ELF_CLASS == ELFCLASS32 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elfhdr elf32_hdr 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elf_phdr elf32_phdr 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elf_note elf32_note 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elfhdr elf64_hdr 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elf_phdr elf64_phdr 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define elf_note elf64_note 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 362