elf.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* elf.h - Extended Load Format header */
  2. /* Copyright 1992-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01i,27mar02,jn   Add STT_ARM_16BIT to the list of supported types. Make defs of 
  7.                  STT_ARM_TFUNC and STT_ARM_16BIT match the gnu definitions 
  8.                  from host/src/gnu/include/elf/arm.h (use STT_LOPROC and
  9.  STT_HIPROC instead of numbers).
  10. 01h,25jan02,rec  merge in Coldfire changes
  11. 01g,31aug01,jn   change ARM OMF to ELF
  12. 01f,01mar00,frf  Add SH4 support for T2.
  13. 01f,04jun99,zl   hitachi SH4 architecture port, provided by Highlander
  14.                  Engineering
  15. 01e,19jun96,ism  added N_TEXT family of defines
  16. 01d,20jul95,ism  added simsolaris support
  17. 01f,24mar95,yao  added EM_PPC_OLD for EABI backward compatability.
  18. 01e,23feb95,caf  fixed #endif.
  19. 01d,06dec94,yao  added PPC support.
  20. 01c,01nov94,kdl  removed reference to SPARC architecture.
  21. 01b,18apr94,caf  isolated architecture-specific #includes with "ifdef CPU".
  22. 01a,29oct92,ajm  derived from Motorola delta88 elf.h
  23. */
  24. #ifndef __INCelfh
  25. #define __INCelfh
  26. #ifdef __cplusplus
  27. extern "C" {
  28. #endif
  29. /* Copyright (c) 1990 UNIX System Laboratories, Inc. */
  30. /* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */
  31. /*   All Rights Reserved   */
  32. /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF      */
  33. /* UNIX System Laboratories, Inc.                      */
  34. /* The copyright notice above does not evidence any    */
  35. /* actual or intended publication of such source code. */
  36. #include "elftypes.h"
  37. #define ELF32_FSZ_ADDR 4
  38. #define ELF32_FSZ_HALF 2
  39. #define ELF32_FSZ_OFF 4
  40. #define ELF32_FSZ_SWORD 4
  41. #define ELF32_FSZ_WORD 4
  42. /* "Enumerations" below use ...NUM as the number of
  43.  * values in the list.  It should be 1 greater than the
  44.  * highest "real" value.
  45.  */
  46. /* ELF header
  47.  */
  48. #define EI_NIDENT 16
  49. typedef struct {
  50. unsigned char e_ident[EI_NIDENT]; /* ident bytes */
  51. Elf32_Half e_type; /* file type */
  52. Elf32_Half e_machine; /* target machine */
  53. Elf32_Word e_version; /* file version */
  54. Elf32_Addr e_entry; /* start address */
  55. Elf32_Off e_phoff; /* phdr file offset */
  56. Elf32_Off e_shoff; /* shdr file offset */
  57. Elf32_Word e_flags; /* file flags */
  58. Elf32_Half e_ehsize; /* sizeof ehdr */
  59. Elf32_Half e_phentsize; /* sizeof phdr */
  60. Elf32_Half e_phnum; /* number phdrs */
  61. Elf32_Half e_shentsize; /* sizeof shdr */
  62. Elf32_Half e_shnum; /* number shdrs */
  63. Elf32_Half e_shstrndx; /* shdr string index */
  64. } Elf32_Ehdr;
  65. #define EI_MAG0 0 /* e_ident[] indexes */
  66. #define EI_MAG1 1
  67. #define EI_MAG2 2
  68. #define EI_MAG3 3
  69. #define EI_CLASS 4
  70. #define EI_DATA 5
  71. #define EI_VERSION 6
  72. #define EI_PAD 7
  73. #define ELFMAG0 0x7f /* EI_MAG */
  74. #define ELFMAG1 'E'
  75. #define ELFMAG2 'L'
  76. #define ELFMAG3 'F'
  77. #define ELFMAG "177ELF"
  78. #define SELFMAG 4
  79. #define ELFCLASSNONE 0 /* EI_CLASS */
  80. #define ELFCLASS32 1
  81. #define ELFCLASS64 2
  82. #define ELFCLASSNUM 3
  83. #define ELFDATANONE 0 /* EI_DATA */
  84. #define ELFDATA2LSB 1
  85. #define ELFDATA2MSB 2
  86. #define ELFDATANUM 3
  87. #define ET_NONE 0 /* e_type */
  88. #define ET_REL 1
  89. #define ET_EXEC 2
  90. #define ET_DYN 3
  91. #define ET_CORE 4
  92. #define ET_NUM 5
  93. #define ET_LOPROC 0xff00 /* processor specific range */
  94. #define ET_HIPROC 0xffff
  95. #define EM_NONE 0 /* e_machine */
  96. #define EM_M32 1 /* AT&T WE 32100 */
  97. #define EM_SPARC 2 /* Sun SPARC */
  98. #define EM_386 3 /* Intel 80386 */
  99. #define EM_68K 4 /* Motorola 68000 */
  100. #define EM_88K 5 /* Motorola 88000 */
  101. #define EM_486 6 /* Intel 80486 */
  102. #define EM_860 7 /* Intel i860 */
  103. #define EM_MIPS 8 /* MIPS family  */
  104. #define EM_PPC_OLD      17              /* PowerPC family - EABI draft 1.0 */
  105. #define EM_PPC          20              /* PowerPC family */
  106. #define EM_ARM 40 /* ARM/Thumb family */
  107. #define EM_SH           42              /* Hitachi SH family */
  108. #define EV_NONE 0 /* e_version, EI_VERSION */
  109. #define EV_CURRENT 1
  110. #define EV_NUM 2
  111. #ifdef m88k /* this should moved to  elf88k.h */
  112. #define EF_88K_SYSINUSER 0x2 /* e_flags */
  113. #endif
  114. /* Program header */
  115. typedef struct {
  116. Elf32_Word p_type; /* entry type */
  117. Elf32_Off p_offset; /* file offset */
  118. Elf32_Addr p_vaddr; /* virtual address */
  119. Elf32_Addr p_paddr; /* physical address */
  120. Elf32_Word p_filesz; /* file size */
  121. Elf32_Word p_memsz; /* memory size */
  122. Elf32_Word p_flags; /* entry flags */
  123. Elf32_Word p_align; /* memory/file alignment */
  124. } Elf32_Phdr;
  125. #define PT_NULL 0 /* p_type */
  126. #define PT_LOAD 1
  127. #define PT_DYNAMIC 2
  128. #define PT_INTERP 3
  129. #define PT_NOTE 4
  130. #define PT_SHLIB 5
  131. #define PT_PHDR 6
  132. #define PT_NUM 7
  133. #define PT_LOPROC 0x70000000 /* processor specific range */
  134. #define PT_HIPROC 0x7fffffff
  135. #define PF_R 0x4 /* p_flags */
  136. #define PF_W 0x2
  137. #define PF_X 0x1
  138. #define PF_MASKPROC 0xf0000000 /* processor specific values */
  139. /* Section header */
  140. typedef struct {
  141. Elf32_Word sh_name; /* section name */
  142. Elf32_Word sh_type; /* SHT_... */
  143. Elf32_Word sh_flags; /* SHF_... */
  144. Elf32_Addr sh_addr; /* virtual address */
  145. Elf32_Off sh_offset; /* file offset */
  146. Elf32_Word sh_size; /* section size */
  147. Elf32_Word sh_link; /* misc info */
  148. Elf32_Word sh_info; /* misc info */
  149. Elf32_Word sh_addralign; /* memory alignment */
  150. Elf32_Word sh_entsize; /* entry size if table */
  151. } Elf32_Shdr;
  152. #define SHT_NULL 0 /* sh_type */
  153. #define SHT_PROGBITS 1
  154. #define SHT_SYMTAB 2
  155. #define SHT_STRTAB 3
  156. #define SHT_RELA 4
  157. #define SHT_HASH 5
  158. #define SHT_DYNAMIC 6
  159. #define SHT_NOTE 7
  160. #define SHT_NOBITS 8
  161. #define SHT_REL 9
  162. #define SHT_SHLIB 10
  163. #define SHT_DYNSYM 11
  164. #define SHT_NUM 12
  165. #define SHT_LOUSER 0x80000000
  166. #define SHT_HIUSER 0xffffffff
  167. #define SHT_LOPROC 0x70000000 /* processor specific range */
  168. #define SHT_HIPROC 0x7fffffff
  169. #define SHF_WRITE 0x1 /* sh_flags */
  170. #define SHF_ALLOC 0x2
  171. #define SHF_EXECINSTR 0x4
  172. #define SHF_MASKPROC 0xf0000000 /* processor specific values */
  173. #define SHN_UNDEF 0 /* special section numbers */
  174. #define SHN_LORESERVE 0xff00
  175. #define SHN_ABS 0xfff1
  176. #define SHN_COMMON 0xfff2
  177. #define SHN_HIRESERVE 0xffff
  178. #define SHN_LOPROC 0xff00 /* processor specific range */
  179. #define SHN_HIPROC 0xff1f
  180. /* Symbol table */
  181. typedef struct {
  182. Elf32_Word st_name;
  183. Elf32_Addr st_value;
  184. Elf32_Word st_size;
  185. unsigned char st_info; /* bind, type: ELF_32_ST_... */
  186. unsigned char st_other;
  187. Elf32_Half st_shndx; /* SHN_... */
  188. } Elf32_Sym;
  189. #define STN_UNDEF 0
  190. /* The macros compose and decompose values for S.st_info
  191.  *
  192.  * bind = ELF32_ST_BIND(S.st_info)
  193.  * type = ELF32_ST_TYPE(S.st_info)
  194.  * S.st_info = ELF32_ST_INFO(bind, type)
  195.  */
  196. #define ELF32_ST_BIND(info) ((info) >> 4)
  197. #define ELF32_ST_TYPE(info) ((info) & 0xf)
  198. #define ELF32_ST_INFO(bind,type) (((bind)<<4)+((type)&0xf))
  199. #define STB_LOCAL 0 /* BIND */
  200. #define STB_GLOBAL 1
  201. #define STB_WEAK 2
  202. #define STB_NUM 3
  203. #define STB_LOPROC 13 /* processor specific range */
  204. #define STB_HIPROC 15
  205. #define STT_NOTYPE 0 /* TYPE */
  206. #define STT_OBJECT 1
  207. #define STT_FUNC 2
  208. #define STT_SECTION 3
  209. #define STT_FILE 4
  210. #define STT_NUM 5
  211. #define STT_LOPROC 13 /* processor specific range */
  212. #define STT_HIPROC 15
  213. /* 
  214.  * The STT_ARM_TFUNC type is used by the gnu compiler to mark Thumb
  215.  * functions.  The STT_ARM_16BIT type is the thumb equivalent of an
  216.  * object.  They are not part of the ARM ABI or EABI - they come from gnu.
  217.  */
  218. #define STT_ARM_TFUNC   STT_LOPROC      /* Thumb function */
  219. #define STT_ARM_16BIT   STT_HIPROC      /* Thumb label    */
  220. /* Relocation */
  221. typedef struct {
  222. Elf32_Addr r_offset;
  223. Elf32_Word r_info; /* sym, type: ELF32_R_... */
  224. } Elf32_Rel;
  225. typedef struct {
  226. Elf32_Addr r_offset;
  227. Elf32_Word r_info; /* sym, type: ELF32_R_... */
  228. Elf32_Sword r_addend;
  229. } Elf32_Rela;
  230. /* The macros compose and decompose values for Rel.r_info, Rela.f_info
  231.  *
  232.  * sym = ELF32_R_SYM(R.r_info)
  233.  * type = ELF32_R_TYPE(R.r_info)
  234.  * R.r_info = ELF32_R_INFO(sym, type)
  235.  */
  236. #define ELF32_R_SYM(info) ((info)>>8)
  237. #define ELF32_R_TYPE(info) ((unsigned char)(info))
  238. #define ELF32_R_INFO(sym,type) (((sym)<<8)+(unsigned char)(type))
  239. #if CPU==SIMSPARCSOLARIS
  240. /*
  241.  * Simple values for n_type.  VxWorks symbol defines.
  242.  */
  243. #define N_UNDF  0x0             /* undefined */
  244. #define N_ABS   0x2             /* absolute */
  245. #define N_TEXT  0x4             /* text */
  246. #define N_DATA  0x6             /* data */
  247. #define N_BSS   0x8             /* bss */
  248. #define N_COMM  0x12            /* common (internal to ld) */
  249. #define N_FN    0x1f            /* file name symbol */
  250. #define N_EXT   01              /* external bit, or'ed in */
  251. #define N_TYPE  0x1e            /* mask for all the type bits */
  252. #define MAX_SCNS        11
  253. #define NO_SCNS         0
  254. #endif /* if CPU==SIMSPARCSOLARIS */
  255. #ifdef CPU
  256. #if FALSE /* SPARC does not currently use elf */
  257. #if  (CPU_FAMILY == SPARC)
  258. #include "arch/sparc/elfSparc.h"
  259. #endif /* (CPU_FAMILY == SPARC) */
  260. #endif /* FALSE */
  261. #if  (CPU_FAMILY == SIMSPARCSOLARIS)
  262. #include "arch/simsolaris/elfSparc.h"
  263. #endif /* (CPU_FAMILY == SIMSPARCSOLARIS) */
  264. #if (CPU_FAMILY == MIPS)
  265. #include "arch/mips/elfMips.h"
  266. #endif /* (CPU_FAMILY) */
  267. #if     (CPU_FAMILY == PPC)
  268. #include "arch/ppc/elfPpc.h"
  269. #endif  /* (CPU_FAMILY) */
  270. #if     (CPU_FAMILY == SH)
  271. #include "arch/sh/elfSh.h"
  272. #endif  /* (CPU_FAMILY) */
  273. #if     (CPU_FAMILY == ARM)
  274. #include "arch/arm/elfArm.h"
  275. #endif  /* (CPU_FAMILY) */
  276. #if     (CPU_FAMILY == COLDFIRE)
  277. #include "arch/coldfire/elfColdfire.h"
  278. #endif  /* (CPU_FAMILY) */
  279. #endif /* CPU */
  280. #ifdef __cplusplus
  281. }
  282. #endif
  283. #endif /* __INCelfh */