elf.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:16k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _LINUX_ELF_H
  2. #define _LINUX_ELF_H
  3. #include <linux/types.h>
  4. #include <asm/elf.h>
  5. /* 32-bit ELF base types. */
  6. typedef __u32 Elf32_Addr;
  7. typedef __u16 Elf32_Half;
  8. typedef __u32 Elf32_Off;
  9. typedef __s32 Elf32_Sword;
  10. typedef __u32 Elf32_Word;
  11. /* 64-bit ELF base types. */
  12. typedef __u64 Elf64_Addr;
  13. typedef __u16 Elf64_Half;
  14. typedef __s16 Elf64_SHalf;
  15. typedef __u64 Elf64_Off;
  16. typedef __s32 Elf64_Sword;
  17. typedef __u32 Elf64_Word;
  18. typedef __u64 Elf64_Xword;
  19. typedef __s64 Elf64_Sxword;
  20. /* These constants are for the segment types stored in the image headers */
  21. #define PT_NULL    0
  22. #define PT_LOAD    1
  23. #define PT_DYNAMIC 2
  24. #define PT_INTERP  3
  25. #define PT_NOTE    4
  26. #define PT_SHLIB   5
  27. #define PT_PHDR    6
  28. #define PT_LOPROC  0x70000000
  29. #define PT_HIPROC  0x7fffffff
  30. #define PT_MIPS_REGINFO 0x70000000
  31. /* Flags in the e_flags field of the header */
  32. #define EF_MIPS_NOREORDER 0x00000001
  33. #define EF_MIPS_PIC       0x00000002
  34. #define EF_MIPS_CPIC      0x00000004
  35. #define EF_MIPS_ARCH      0xf0000000
  36. /* These constants define the different elf file types */
  37. #define ET_NONE   0
  38. #define ET_REL    1
  39. #define ET_EXEC   2
  40. #define ET_DYN    3
  41. #define ET_CORE   4
  42. #define ET_LOPROC 0xff00
  43. #define ET_HIPROC 0xffff
  44. /* These constants define the various ELF target machines */
  45. #define EM_NONE  0
  46. #define EM_M32   1
  47. #define EM_SPARC 2
  48. #define EM_386   3
  49. #define EM_68K   4
  50. #define EM_88K   5
  51. #define EM_486   6   /* Perhaps disused */
  52. #define EM_860   7
  53. #define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
  54. #define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
  55. #define EM_PARISC      15 /* HPPA */
  56. #define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
  57. #define EM_PPC        20 /* PowerPC */
  58. #define EM_PPC64       21       /* PowerPC64 */
  59. #define EM_SH        42 /* SuperH */
  60. #define EM_SPARCV9     43 /* SPARC v9 64-bit */
  61. #define EM_IA_64 50 /* HP/Intel IA-64 */
  62. #define EM_X86_64 62 /* AMD x86-64 */
  63. #define EM_S390 22 /* IBM S/390 */
  64. #define EM_CRIS         76      /* Axis Communications 32-bit embedded processor */
  65. /*
  66.  * This is an interim value that we will use until the committee comes
  67.  * up with a final number.
  68.  */
  69. #define EM_ALPHA 0x9026
  70. /*
  71.  * This is the old interim value for S/390 architecture
  72.  */
  73. #define EM_S390_OLD     0xA390
  74. /* This is the info that is needed to parse the dynamic section of the file */
  75. #define DT_NULL 0
  76. #define DT_NEEDED 1
  77. #define DT_PLTRELSZ 2
  78. #define DT_PLTGOT 3
  79. #define DT_HASH 4
  80. #define DT_STRTAB 5
  81. #define DT_SYMTAB 6
  82. #define DT_RELA 7
  83. #define DT_RELASZ 8
  84. #define DT_RELAENT 9
  85. #define DT_STRSZ 10
  86. #define DT_SYMENT 11
  87. #define DT_INIT 12
  88. #define DT_FINI 13
  89. #define DT_SONAME 14
  90. #define DT_RPATH  15
  91. #define DT_SYMBOLIC 16
  92. #define DT_REL         17
  93. #define DT_RELSZ 18
  94. #define DT_RELENT 19
  95. #define DT_PLTREL 20
  96. #define DT_DEBUG 21
  97. #define DT_TEXTREL 22
  98. #define DT_JMPREL 23
  99. #define DT_LOPROC 0x70000000
  100. #define DT_HIPROC 0x7fffffff
  101. #define DT_MIPS_RLD_VERSION 0x70000001
  102. #define DT_MIPS_TIME_STAMP 0x70000002
  103. #define DT_MIPS_ICHECKSUM 0x70000003
  104. #define DT_MIPS_IVERSION 0x70000004
  105. #define DT_MIPS_FLAGS 0x70000005
  106.   #define RHF_NONE   0
  107.   #define RHF_HARDWAY   1
  108.   #define RHF_NOTPOT   2
  109. #define DT_MIPS_BASE_ADDRESS 0x70000006
  110. #define DT_MIPS_CONFLICT 0x70000008
  111. #define DT_MIPS_LIBLIST 0x70000009
  112. #define DT_MIPS_LOCAL_GOTNO 0x7000000a
  113. #define DT_MIPS_CONFLICTNO 0x7000000b
  114. #define DT_MIPS_LIBLISTNO 0x70000010
  115. #define DT_MIPS_SYMTABNO 0x70000011
  116. #define DT_MIPS_UNREFEXTNO 0x70000012
  117. #define DT_MIPS_GOTSYM 0x70000013
  118. #define DT_MIPS_HIPAGENO 0x70000014
  119. #define DT_MIPS_RLD_MAP 0x70000016
  120. /* This info is needed when parsing the symbol table */
  121. #define STB_LOCAL  0
  122. #define STB_GLOBAL 1
  123. #define STB_WEAK   2
  124. #define STT_NOTYPE  0
  125. #define STT_OBJECT  1
  126. #define STT_FUNC    2
  127. #define STT_SECTION 3
  128. #define STT_FILE    4
  129. #define ELF32_ST_BIND(x) ((x) >> 4)
  130. #define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
  131. /* Symbolic values for the entries in the auxiliary table
  132.    put on the initial stack */
  133. #define AT_NULL   0 /* end of vector */
  134. #define AT_IGNORE 1 /* entry should be ignored */
  135. #define AT_EXECFD 2 /* file descriptor of program */
  136. #define AT_PHDR   3 /* program headers for program */
  137. #define AT_PHENT  4 /* size of program header entry */
  138. #define AT_PHNUM  5 /* number of program headers */
  139. #define AT_PAGESZ 6 /* system page size */
  140. #define AT_BASE   7 /* base address of interpreter */
  141. #define AT_FLAGS  8 /* flags */
  142. #define AT_ENTRY  9 /* entry point of program */
  143. #define AT_NOTELF 10 /* program is not ELF */
  144. #define AT_UID    11 /* real uid */
  145. #define AT_EUID   12 /* effective uid */
  146. #define AT_GID    13 /* real gid */
  147. #define AT_EGID   14 /* effective gid */
  148. #define AT_PLATFORM 15  /* string identifying CPU for optimizations */
  149. #define AT_HWCAP  16    /* arch dependent hints at CPU capabilities */
  150. #define AT_CLKTCK 17 /* frequency at which times() increments */
  151. typedef struct dynamic{
  152.   Elf32_Sword d_tag;
  153.   union{
  154.     Elf32_Sword d_val;
  155.     Elf32_Addr d_ptr;
  156.   } d_un;
  157. } Elf32_Dyn;
  158. typedef struct {
  159.   Elf64_Sxword d_tag; /* entry tag value */
  160.   union {
  161.     Elf64_Xword d_val;
  162.     Elf64_Addr d_ptr;
  163.   } d_un;
  164. } Elf64_Dyn;
  165. /* The following are used with relocations */
  166. #define ELF32_R_SYM(x) ((x) >> 8)
  167. #define ELF32_R_TYPE(x) ((x) & 0xff)
  168. #define R_386_NONE 0
  169. #define R_386_32 1
  170. #define R_386_PC32 2
  171. #define R_386_GOT32 3
  172. #define R_386_PLT32 4
  173. #define R_386_COPY 5
  174. #define R_386_GLOB_DAT 6
  175. #define R_386_JMP_SLOT 7
  176. #define R_386_RELATIVE 8
  177. #define R_386_GOTOFF 9
  178. #define R_386_GOTPC 10
  179. #define R_386_NUM 11
  180. #define R_MIPS_NONE 0
  181. #define R_MIPS_16 1
  182. #define R_MIPS_32 2
  183. #define R_MIPS_REL32 3
  184. #define R_MIPS_26 4
  185. #define R_MIPS_HI16 5
  186. #define R_MIPS_LO16 6
  187. #define R_MIPS_GPREL16 7
  188. #define R_MIPS_LITERAL 8
  189. #define R_MIPS_GOT16 9
  190. #define R_MIPS_PC16 10
  191. #define R_MIPS_CALL16 11
  192. #define R_MIPS_GPREL32 12
  193. /* The remaining relocs are defined on Irix, although they are not
  194.    in the MIPS ELF ABI.  */
  195. #define R_MIPS_UNUSED1 13
  196. #define R_MIPS_UNUSED2 14
  197. #define R_MIPS_UNUSED3 15
  198. #define R_MIPS_SHIFT5 16
  199. #define R_MIPS_SHIFT6 17
  200. #define R_MIPS_64 18
  201. #define R_MIPS_GOT_DISP 19
  202. #define R_MIPS_GOT_PAGE 20
  203. #define R_MIPS_GOT_OFST 21
  204. /*
  205.  * The following two relocation types are specified in the MIPS ABI
  206.  * conformance guide version 1.2 but not yet in the psABI.
  207.  */
  208. #define R_MIPS_GOTHI16 22
  209. #define R_MIPS_GOTLO16 23
  210. #define R_MIPS_SUB 24
  211. #define R_MIPS_INSERT_A 25
  212. #define R_MIPS_INSERT_B 26
  213. #define R_MIPS_DELETE 27
  214. #define R_MIPS_HIGHER 28
  215. #define R_MIPS_HIGHEST 29
  216. /*
  217.  * The following two relocation types are specified in the MIPS ABI
  218.  * conformance guide version 1.2 but not yet in the psABI.
  219.  */
  220. #define R_MIPS_CALLHI16 30
  221. #define R_MIPS_CALLLO16 31
  222. /*
  223.  * This range is reserved for vendor specific relocations.
  224.  */
  225. #define R_MIPS_LOVENDOR 100
  226. #define R_MIPS_HIVENDOR 127
  227. /*
  228.  * Sparc ELF relocation types
  229.  */
  230. #define R_SPARC_NONE 0
  231. #define R_SPARC_8 1
  232. #define R_SPARC_16 2
  233. #define R_SPARC_32 3
  234. #define R_SPARC_DISP8 4
  235. #define R_SPARC_DISP16 5
  236. #define R_SPARC_DISP32 6
  237. #define R_SPARC_WDISP30 7
  238. #define R_SPARC_WDISP22 8
  239. #define R_SPARC_HI22 9
  240. #define R_SPARC_22 10
  241. #define R_SPARC_13 11
  242. #define R_SPARC_LO10 12
  243. #define R_SPARC_GOT10 13
  244. #define R_SPARC_GOT13 14
  245. #define R_SPARC_GOT22 15
  246. #define R_SPARC_PC10 16
  247. #define R_SPARC_PC22 17
  248. #define R_SPARC_WPLT30 18
  249. #define R_SPARC_COPY 19
  250. #define R_SPARC_GLOB_DAT 20
  251. #define R_SPARC_JMP_SLOT 21
  252. #define R_SPARC_RELATIVE 22
  253. #define R_SPARC_UA32 23
  254. #define R_SPARC_PLT32 24
  255. #define R_SPARC_HIPLT22 25
  256. #define R_SPARC_LOPLT10 26
  257. #define R_SPARC_PCPLT32 27
  258. #define R_SPARC_PCPLT22 28
  259. #define R_SPARC_PCPLT10 29
  260. #define R_SPARC_10 30
  261. #define R_SPARC_11 31
  262. #define R_SPARC_WDISP16 40
  263. #define R_SPARC_WDISP19 41
  264. #define R_SPARC_7 43
  265. #define R_SPARC_5 44
  266. #define R_SPARC_6 45
  267. /* Bits present in AT_HWCAP, primarily for Sparc32.  */
  268. #define HWCAP_SPARC_FLUSH       1    /* CPU supports flush instruction. */
  269. #define HWCAP_SPARC_STBAR       2
  270. #define HWCAP_SPARC_SWAP        4
  271. #define HWCAP_SPARC_MULDIV      8
  272. #define HWCAP_SPARC_V9 16
  273. #define HWCAP_SPARC_ULTRA3 32
  274. /*
  275.  * 68k ELF relocation types
  276.  */
  277. #define R_68K_NONE 0
  278. #define R_68K_32 1
  279. #define R_68K_16 2
  280. #define R_68K_8 3
  281. #define R_68K_PC32 4
  282. #define R_68K_PC16 5
  283. #define R_68K_PC8 6
  284. #define R_68K_GOT32 7
  285. #define R_68K_GOT16 8
  286. #define R_68K_GOT8 9
  287. #define R_68K_GOT32O 10
  288. #define R_68K_GOT16O 11
  289. #define R_68K_GOT8O 12
  290. #define R_68K_PLT32 13
  291. #define R_68K_PLT16 14
  292. #define R_68K_PLT8 15
  293. #define R_68K_PLT32O 16
  294. #define R_68K_PLT16O 17
  295. #define R_68K_PLT8O 18
  296. #define R_68K_COPY 19
  297. #define R_68K_GLOB_DAT 20
  298. #define R_68K_JMP_SLOT 21
  299. #define R_68K_RELATIVE 22
  300. /*
  301.  * Alpha ELF relocation types
  302.  */
  303. #define R_ALPHA_NONE            0       /* No reloc */
  304. #define R_ALPHA_REFLONG         1       /* Direct 32 bit */
  305. #define R_ALPHA_REFQUAD         2       /* Direct 64 bit */
  306. #define R_ALPHA_GPREL32         3       /* GP relative 32 bit */
  307. #define R_ALPHA_LITERAL         4       /* GP relative 16 bit w/optimization */
  308. #define R_ALPHA_LITUSE          5       /* Optimization hint for LITERAL */
  309. #define R_ALPHA_GPDISP          6       /* Add displacement to GP */
  310. #define R_ALPHA_BRADDR          7       /* PC+4 relative 23 bit shifted */
  311. #define R_ALPHA_HINT            8       /* PC+4 relative 16 bit shifted */
  312. #define R_ALPHA_SREL16          9       /* PC relative 16 bit */
  313. #define R_ALPHA_SREL32          10      /* PC relative 32 bit */
  314. #define R_ALPHA_SREL64          11      /* PC relative 64 bit */
  315. #define R_ALPHA_OP_PUSH         12      /* OP stack push */
  316. #define R_ALPHA_OP_STORE        13      /* OP stack pop and store */
  317. #define R_ALPHA_OP_PSUB         14      /* OP stack subtract */
  318. #define R_ALPHA_OP_PRSHIFT      15      /* OP stack right shift */
  319. #define R_ALPHA_GPVALUE         16
  320. #define R_ALPHA_GPRELHIGH       17
  321. #define R_ALPHA_GPRELLOW        18
  322. #define R_ALPHA_IMMED_GP_16     19
  323. #define R_ALPHA_IMMED_GP_HI32   20
  324. #define R_ALPHA_IMMED_SCN_HI32  21
  325. #define R_ALPHA_IMMED_BR_HI32   22
  326. #define R_ALPHA_IMMED_LO32      23
  327. #define R_ALPHA_COPY            24      /* Copy symbol at runtime */
  328. #define R_ALPHA_GLOB_DAT        25      /* Create GOT entry */
  329. #define R_ALPHA_JMP_SLOT        26      /* Create PLT entry */
  330. #define R_ALPHA_RELATIVE        27      /* Adjust by program base */
  331. /* Legal values for e_flags field of Elf64_Ehdr.  */
  332. #define EF_ALPHA_32BIT 1 /* All addresses are below 2GB */
  333. typedef struct elf32_rel {
  334.   Elf32_Addr r_offset;
  335.   Elf32_Word r_info;
  336. } Elf32_Rel;
  337. typedef struct elf64_rel {
  338.   Elf64_Addr r_offset; /* Location at which to apply the action */
  339.   Elf64_Xword r_info; /* index and type of relocation */
  340. } Elf64_Rel;
  341. typedef struct elf32_rela{
  342.   Elf32_Addr r_offset;
  343.   Elf32_Word r_info;
  344.   Elf32_Sword r_addend;
  345. } Elf32_Rela;
  346. typedef struct elf64_rela {
  347.   Elf64_Addr r_offset; /* Location at which to apply the action */
  348.   Elf64_Xword r_info; /* index and type of relocation */
  349.   Elf64_Sxword r_addend; /* Constant addend used to compute value */
  350. } Elf64_Rela;
  351. typedef struct elf32_sym{
  352.   Elf32_Word st_name;
  353.   Elf32_Addr st_value;
  354.   Elf32_Word st_size;
  355.   unsigned char st_info;
  356.   unsigned char st_other;
  357.   Elf32_Half st_shndx;
  358. } Elf32_Sym;
  359. typedef struct elf64_sym {
  360.   Elf64_Word st_name; /* Symbol name, index in string tbl */
  361.   unsigned char st_info; /* Type and binding attributes */
  362.   unsigned char st_other; /* No defined meaning, 0 */
  363.   Elf64_Half st_shndx; /* Associated section index */
  364.   Elf64_Addr st_value; /* Value of the symbol */
  365.   Elf64_Xword st_size; /* Associated symbol size */
  366. } Elf64_Sym;
  367. #define EI_NIDENT 16
  368. typedef struct elf32_hdr{
  369.   unsigned char e_ident[EI_NIDENT];
  370.   Elf32_Half e_type;
  371.   Elf32_Half e_machine;
  372.   Elf32_Word e_version;
  373.   Elf32_Addr e_entry;  /* Entry point */
  374.   Elf32_Off e_phoff;
  375.   Elf32_Off e_shoff;
  376.   Elf32_Word e_flags;
  377.   Elf32_Half e_ehsize;
  378.   Elf32_Half e_phentsize;
  379.   Elf32_Half e_phnum;
  380.   Elf32_Half e_shentsize;
  381.   Elf32_Half e_shnum;
  382.   Elf32_Half e_shstrndx;
  383. } Elf32_Ehdr;
  384. typedef struct elf64_hdr {
  385.   unsigned char e_ident[16]; /* ELF "magic number" */
  386.   Elf64_Half e_type;
  387.   Elf64_Half e_machine;
  388.   Elf64_Word e_version;
  389.   Elf64_Addr e_entry; /* Entry point virtual address */
  390.   Elf64_Off e_phoff; /* Program header table file offset */
  391.   Elf64_Off e_shoff; /* Section header table file offset */
  392.   Elf64_Word e_flags;
  393.   Elf64_Half e_ehsize;
  394.   Elf64_Half e_phentsize;
  395.   Elf64_Half e_phnum;
  396.   Elf64_Half e_shentsize;
  397.   Elf64_Half e_shnum;
  398.   Elf64_Half e_shstrndx;
  399. } Elf64_Ehdr;
  400. /* These constants define the permissions on sections in the program
  401.    header, p_flags. */
  402. #define PF_R 0x4
  403. #define PF_W 0x2
  404. #define PF_X 0x1
  405. typedef struct elf32_phdr{
  406.   Elf32_Word p_type;
  407.   Elf32_Off p_offset;
  408.   Elf32_Addr p_vaddr;
  409.   Elf32_Addr p_paddr;
  410.   Elf32_Word p_filesz;
  411.   Elf32_Word p_memsz;
  412.   Elf32_Word p_flags;
  413.   Elf32_Word p_align;
  414. } Elf32_Phdr;
  415. typedef struct elf64_phdr {
  416.   Elf64_Word p_type;
  417.   Elf64_Word p_flags;
  418.   Elf64_Off p_offset; /* Segment file offset */
  419.   Elf64_Addr p_vaddr; /* Segment virtual address */
  420.   Elf64_Addr p_paddr; /* Segment physical address */
  421.   Elf64_Xword p_filesz; /* Segment size in file */
  422.   Elf64_Xword p_memsz; /* Segment size in memory */
  423.   Elf64_Xword p_align; /* Segment alignment, file & memory */
  424. } Elf64_Phdr;
  425. /* sh_type */
  426. #define SHT_NULL 0
  427. #define SHT_PROGBITS 1
  428. #define SHT_SYMTAB 2
  429. #define SHT_STRTAB 3
  430. #define SHT_RELA 4
  431. #define SHT_HASH 5
  432. #define SHT_DYNAMIC 6
  433. #define SHT_NOTE 7
  434. #define SHT_NOBITS 8
  435. #define SHT_REL 9
  436. #define SHT_SHLIB 10
  437. #define SHT_DYNSYM 11
  438. #define SHT_NUM 12
  439. #define SHT_LOPROC 0x70000000
  440. #define SHT_HIPROC 0x7fffffff
  441. #define SHT_LOUSER 0x80000000
  442. #define SHT_HIUSER 0xffffffff
  443. #define SHT_MIPS_LIST 0x70000000
  444. #define SHT_MIPS_CONFLICT 0x70000002
  445. #define SHT_MIPS_GPTAB 0x70000003
  446. #define SHT_MIPS_UCODE 0x70000004
  447. /* sh_flags */
  448. #define SHF_WRITE 0x1
  449. #define SHF_ALLOC 0x2
  450. #define SHF_EXECINSTR 0x4
  451. #define SHF_MASKPROC 0xf0000000
  452. #define SHF_MIPS_GPREL 0x10000000
  453. /* special section indexes */
  454. #define SHN_UNDEF 0
  455. #define SHN_LORESERVE 0xff00
  456. #define SHN_LOPROC 0xff00
  457. #define SHN_HIPROC 0xff1f
  458. #define SHN_ABS 0xfff1
  459. #define SHN_COMMON 0xfff2
  460. #define SHN_HIRESERVE 0xffff
  461. #define SHN_MIPS_ACCOMON 0xff00
  462.  
  463. typedef struct {
  464.   Elf32_Word sh_name;
  465.   Elf32_Word sh_type;
  466.   Elf32_Word sh_flags;
  467.   Elf32_Addr sh_addr;
  468.   Elf32_Off sh_offset;
  469.   Elf32_Word sh_size;
  470.   Elf32_Word sh_link;
  471.   Elf32_Word sh_info;
  472.   Elf32_Word sh_addralign;
  473.   Elf32_Word sh_entsize;
  474. } Elf32_Shdr;
  475. typedef struct elf64_shdr {
  476.   Elf64_Word sh_name; /* Section name, index in string tbl */
  477.   Elf64_Word sh_type; /* Type of section */
  478.   Elf64_Xword sh_flags; /* Miscellaneous section attributes */
  479.   Elf64_Addr sh_addr; /* Section virtual addr at execution */
  480.   Elf64_Off sh_offset; /* Section file offset */
  481.   Elf64_Xword sh_size; /* Size of section in bytes */
  482.   Elf64_Word sh_link; /* Index of another section */
  483.   Elf64_Word sh_info; /* Additional section information */
  484.   Elf64_Xword sh_addralign; /* Section alignment */
  485.   Elf64_Xword sh_entsize; /* Entry size if section holds table */
  486. } Elf64_Shdr;
  487. #define EI_MAG0 0 /* e_ident[] indexes */
  488. #define EI_MAG1 1
  489. #define EI_MAG2 2
  490. #define EI_MAG3 3
  491. #define EI_CLASS 4
  492. #define EI_DATA 5
  493. #define EI_VERSION 6
  494. #define EI_PAD 7
  495. #define ELFMAG0 0x7f /* EI_MAG */
  496. #define ELFMAG1 'E'
  497. #define ELFMAG2 'L'
  498. #define ELFMAG3 'F'
  499. #define ELFMAG "177ELF"
  500. #define SELFMAG 4
  501. #define ELFCLASSNONE 0 /* EI_CLASS */
  502. #define ELFCLASS32 1
  503. #define ELFCLASS64 2
  504. #define ELFCLASSNUM 3
  505. #define ELFDATANONE 0 /* e_ident[EI_DATA] */
  506. #define ELFDATA2LSB 1
  507. #define ELFDATA2MSB 2
  508. #define EV_NONE 0 /* e_version, EI_VERSION */
  509. #define EV_CURRENT 1
  510. #define EV_NUM 2
  511. /* Notes used in ET_CORE */
  512. #define NT_PRSTATUS 1
  513. #define NT_PRFPREG 2
  514. #define NT_PRPSINFO 3
  515. #define NT_TASKSTRUCT 4
  516. #define NT_PRFPXREG 20
  517. /* Note header in a PT_NOTE section */
  518. typedef struct elf32_note {
  519.   Elf32_Word n_namesz; /* Name size */
  520.   Elf32_Word n_descsz; /* Content size */
  521.   Elf32_Word n_type; /* Content type */
  522. } Elf32_Nhdr;
  523. /* Note header in a PT_NOTE section */
  524. typedef struct elf64_note {
  525.   Elf64_Word n_namesz; /* Name size */
  526.   Elf64_Word n_descsz; /* Content size */
  527.   Elf64_Word n_type; /* Content type */
  528. } Elf64_Nhdr;
  529. #if ELF_CLASS == ELFCLASS32
  530. extern Elf32_Dyn _DYNAMIC [];
  531. #define elfhdr elf32_hdr
  532. #define elf_phdr elf32_phdr
  533. #define elf_note elf32_note
  534. #else
  535. extern Elf64_Dyn _DYNAMIC [];
  536. #define elfhdr elf64_hdr
  537. #define elf_phdr elf64_phdr
  538. #define elf_note elf64_note
  539. #endif
  540. #endif /* _LINUX_ELF_H */