1/**************************************************************************** 2 **************************************************************************** 3 *** 4 *** This header was automatically generated from a Linux kernel header 5 *** of the same name, to make information necessary for userspace to 6 *** call into the kernel available to libc. It contains only constants, 7 *** structures, and macros generated from the original header, and thus, 8 *** contains no copyrightable information. 9 *** 10 **************************************************************************** 11 ****************************************************************************/ 12#ifndef _LINUX_ELF_H 13#define _LINUX_ELF_H 14 15#include <linux/types.h> 16#include <linux/auxvec.h> 17#include <linux/elf-em.h> 18#include <asm/elf.h> 19 20#ifndef elf_read_implies_exec 21 22#define elf_read_implies_exec(ex, have_pt_gnu_stack) 0 23#endif 24 25typedef __u32 Elf32_Addr; 26typedef __u16 Elf32_Half; 27typedef __u32 Elf32_Off; 28typedef __s32 Elf32_Sword; 29typedef __u32 Elf32_Word; 30 31typedef __u64 Elf64_Addr; 32typedef __u16 Elf64_Half; 33typedef __s16 Elf64_SHalf; 34typedef __u64 Elf64_Off; 35typedef __s32 Elf64_Sword; 36typedef __u32 Elf64_Word; 37typedef __u64 Elf64_Xword; 38typedef __s64 Elf64_Sxword; 39 40#define PT_NULL 0 41#define PT_LOAD 1 42#define PT_DYNAMIC 2 43#define PT_INTERP 3 44#define PT_NOTE 4 45#define PT_SHLIB 5 46#define PT_PHDR 6 47#define PT_TLS 7 48#define PT_LOOS 0x60000000 49#define PT_HIOS 0x6fffffff 50#define PT_LOPROC 0x70000000 51#define PT_HIPROC 0x7fffffff 52#define PT_GNU_EH_FRAME 0x6474e550 53 54#define PT_GNU_STACK (PT_LOOS + 0x474e551) 55 56#define ET_NONE 0 57#define ET_REL 1 58#define ET_EXEC 2 59#define ET_DYN 3 60#define ET_CORE 4 61#define ET_LOPROC 0xff00 62#define ET_HIPROC 0xffff 63 64#define DT_NULL 0 65#define DT_NEEDED 1 66#define DT_PLTRELSZ 2 67#define DT_PLTGOT 3 68#define DT_HASH 4 69#define DT_STRTAB 5 70#define DT_SYMTAB 6 71#define DT_RELA 7 72#define DT_RELASZ 8 73#define DT_RELAENT 9 74#define DT_STRSZ 10 75#define DT_SYMENT 11 76#define DT_INIT 12 77#define DT_FINI 13 78#define DT_SONAME 14 79#define DT_RPATH 15 80#define DT_SYMBOLIC 16 81#define DT_REL 17 82#define DT_RELSZ 18 83#define DT_RELENT 19 84#define DT_PLTREL 20 85#define DT_DEBUG 21 86#define DT_TEXTREL 22 87#define DT_JMPREL 23 88#define DT_LOPROC 0x70000000 89#define DT_HIPROC 0x7fffffff 90 91#define STB_LOCAL 0 92#define STB_GLOBAL 1 93#define STB_WEAK 2 94 95#define STT_NOTYPE 0 96#define STT_OBJECT 1 97#define STT_FUNC 2 98#define STT_SECTION 3 99#define STT_FILE 4 100#define STT_COMMON 5 101#define STT_TLS 6 102 103#define ELF_ST_BIND(x) ((x) >> 4) 104#define ELF_ST_TYPE(x) (((unsigned int) x) & 0xf) 105#define ELF32_ST_BIND(x) ELF_ST_BIND(x) 106#define ELF32_ST_TYPE(x) ELF_ST_TYPE(x) 107#define ELF64_ST_BIND(x) ELF_ST_BIND(x) 108#define ELF64_ST_TYPE(x) ELF_ST_TYPE(x) 109 110typedef struct dynamic{ 111 Elf32_Sword d_tag; 112 union{ 113 Elf32_Sword d_val; 114 Elf32_Addr d_ptr; 115 } d_un; 116} Elf32_Dyn; 117 118typedef struct { 119 Elf64_Sxword d_tag; 120 union { 121 Elf64_Xword d_val; 122 Elf64_Addr d_ptr; 123 } d_un; 124} Elf64_Dyn; 125 126#define ELF32_R_SYM(x) ((x) >> 8) 127#define ELF32_R_TYPE(x) ((x) & 0xff) 128 129#define ELF64_R_SYM(i) ((i) >> 32) 130#define ELF64_R_TYPE(i) ((i) & 0xffffffff) 131 132typedef struct elf32_rel { 133 Elf32_Addr r_offset; 134 Elf32_Word r_info; 135} Elf32_Rel; 136 137typedef struct elf64_rel { 138 Elf64_Addr r_offset; 139 Elf64_Xword r_info; 140} Elf64_Rel; 141 142typedef struct elf32_rela{ 143 Elf32_Addr r_offset; 144 Elf32_Word r_info; 145 Elf32_Sword r_addend; 146} Elf32_Rela; 147 148typedef struct elf64_rela { 149 Elf64_Addr r_offset; 150 Elf64_Xword r_info; 151 Elf64_Sxword r_addend; 152} Elf64_Rela; 153 154typedef struct elf32_sym{ 155 Elf32_Word st_name; 156 Elf32_Addr st_value; 157 Elf32_Word st_size; 158 unsigned char st_info; 159 unsigned char st_other; 160 Elf32_Half st_shndx; 161} Elf32_Sym; 162 163typedef struct elf64_sym { 164 Elf64_Word st_name; 165 unsigned char st_info; 166 unsigned char st_other; 167 Elf64_Half st_shndx; 168 Elf64_Addr st_value; 169 Elf64_Xword st_size; 170} Elf64_Sym; 171 172#define EI_NIDENT 16 173 174typedef struct elf32_hdr{ 175 unsigned char e_ident[EI_NIDENT]; 176 Elf32_Half e_type; 177 Elf32_Half e_machine; 178 Elf32_Word e_version; 179 Elf32_Addr e_entry; 180 Elf32_Off e_phoff; 181 Elf32_Off e_shoff; 182 Elf32_Word e_flags; 183 Elf32_Half e_ehsize; 184 Elf32_Half e_phentsize; 185 Elf32_Half e_phnum; 186 Elf32_Half e_shentsize; 187 Elf32_Half e_shnum; 188 Elf32_Half e_shstrndx; 189} Elf32_Ehdr; 190 191typedef struct elf64_hdr { 192 unsigned char e_ident[16]; 193 Elf64_Half e_type; 194 Elf64_Half e_machine; 195 Elf64_Word e_version; 196 Elf64_Addr e_entry; 197 Elf64_Off e_phoff; 198 Elf64_Off e_shoff; 199 Elf64_Word e_flags; 200 Elf64_Half e_ehsize; 201 Elf64_Half e_phentsize; 202 Elf64_Half e_phnum; 203 Elf64_Half e_shentsize; 204 Elf64_Half e_shnum; 205 Elf64_Half e_shstrndx; 206} Elf64_Ehdr; 207 208#define PF_R 0x4 209#define PF_W 0x2 210#define PF_X 0x1 211 212typedef struct elf32_phdr{ 213 Elf32_Word p_type; 214 Elf32_Off p_offset; 215 Elf32_Addr p_vaddr; 216 Elf32_Addr p_paddr; 217 Elf32_Word p_filesz; 218 Elf32_Word p_memsz; 219 Elf32_Word p_flags; 220 Elf32_Word p_align; 221} Elf32_Phdr; 222 223typedef struct elf64_phdr { 224 Elf64_Word p_type; 225 Elf64_Word p_flags; 226 Elf64_Off p_offset; 227 Elf64_Addr p_vaddr; 228 Elf64_Addr p_paddr; 229 Elf64_Xword p_filesz; 230 Elf64_Xword p_memsz; 231 Elf64_Xword p_align; 232} Elf64_Phdr; 233 234#define SHT_NULL 0 235#define SHT_PROGBITS 1 236#define SHT_SYMTAB 2 237#define SHT_STRTAB 3 238#define SHT_RELA 4 239#define SHT_HASH 5 240#define SHT_DYNAMIC 6 241#define SHT_NOTE 7 242#define SHT_NOBITS 8 243#define SHT_REL 9 244#define SHT_SHLIB 10 245#define SHT_DYNSYM 11 246#define SHT_NUM 12 247#define SHT_LOPROC 0x70000000 248#define SHT_HIPROC 0x7fffffff 249#define SHT_LOUSER 0x80000000 250#define SHT_HIUSER 0xffffffff 251 252#define SHF_WRITE 0x1 253#define SHF_ALLOC 0x2 254#define SHF_EXECINSTR 0x4 255#define SHF_MASKPROC 0xf0000000 256 257#define SHN_UNDEF 0 258#define SHN_LORESERVE 0xff00 259#define SHN_LOPROC 0xff00 260#define SHN_HIPROC 0xff1f 261#define SHN_ABS 0xfff1 262#define SHN_COMMON 0xfff2 263#define SHN_HIRESERVE 0xffff 264 265typedef struct { 266 Elf32_Word sh_name; 267 Elf32_Word sh_type; 268 Elf32_Word sh_flags; 269 Elf32_Addr sh_addr; 270 Elf32_Off sh_offset; 271 Elf32_Word sh_size; 272 Elf32_Word sh_link; 273 Elf32_Word sh_info; 274 Elf32_Word sh_addralign; 275 Elf32_Word sh_entsize; 276} Elf32_Shdr; 277 278typedef struct elf64_shdr { 279 Elf64_Word sh_name; 280 Elf64_Word sh_type; 281 Elf64_Xword sh_flags; 282 Elf64_Addr sh_addr; 283 Elf64_Off sh_offset; 284 Elf64_Xword sh_size; 285 Elf64_Word sh_link; 286 Elf64_Word sh_info; 287 Elf64_Xword sh_addralign; 288 Elf64_Xword sh_entsize; 289} Elf64_Shdr; 290 291#define EI_MAG0 0 292#define EI_MAG1 1 293#define EI_MAG2 2 294#define EI_MAG3 3 295#define EI_CLASS 4 296#define EI_DATA 5 297#define EI_VERSION 6 298#define EI_OSABI 7 299#define EI_PAD 8 300 301#define ELFMAG0 0x7f 302#define ELFMAG1 'E' 303#define ELFMAG2 'L' 304#define ELFMAG3 'F' 305#define ELFMAG "\177ELF" 306#define SELFMAG 4 307 308#define ELFCLASSNONE 0 309#define ELFCLASS32 1 310#define ELFCLASS64 2 311#define ELFCLASSNUM 3 312 313#define ELFDATANONE 0 314#define ELFDATA2LSB 1 315#define ELFDATA2MSB 2 316 317#define EV_NONE 0 318#define EV_CURRENT 1 319#define EV_NUM 2 320 321#define ELFOSABI_NONE 0 322#define ELFOSABI_LINUX 3 323 324#ifndef ELF_OSABI 325#define ELF_OSABI ELFOSABI_NONE 326#endif 327 328#define NT_PRSTATUS 1 329#define NT_PRFPREG 2 330#define NT_PRPSINFO 3 331#define NT_TASKSTRUCT 4 332#define NT_AUXV 6 333#define NT_PRXFPREG 0x46e62b7f 334 335typedef struct elf32_note { 336 Elf32_Word n_namesz; 337 Elf32_Word n_descsz; 338 Elf32_Word n_type; 339} Elf32_Nhdr; 340 341typedef struct elf64_note { 342 Elf64_Word n_namesz; 343 Elf64_Word n_descsz; 344 Elf64_Word n_type; 345} Elf64_Nhdr; 346 347#if ELF_CLASS == ELFCLASS32 348 349#define elfhdr elf32_hdr 350#define elf_phdr elf32_phdr 351#define elf_note elf32_note 352 353#else 354 355#define elfhdr elf64_hdr 356#define elf_phdr elf64_phdr 357#define elf_note elf64_note 358 359#endif 360 361#endif 362