home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / elf.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  6.1 KB  |  260 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_ELF_H
  11. #define _SYS_ELF_H
  12.  
  13. #ident    "@(#)/usr/include/sys/elf.h.sl 1.1 4.0 12/08/90 8040 AT&T-USL"
  14.  
  15.  
  16. #include <sys/elftypes.h>
  17.  
  18.  
  19. #define ELF32_FSZ_ADDR    4
  20. #define ELF32_FSZ_HALF    2
  21. #define ELF32_FSZ_OFF    4
  22. #define ELF32_FSZ_SWORD    4
  23. #define ELF32_FSZ_WORD    4
  24.  
  25.  
  26. /*    "Enumerations" below use ...NUM as the number of
  27.  *    values in the list.  It should be 1 greater than the
  28.  *    highest "real" value.
  29.  */
  30.  
  31.  
  32. /*    ELF header
  33.  */
  34.  
  35. #define EI_NIDENT    16
  36.  
  37. typedef struct {
  38.     unsigned char    e_ident[EI_NIDENT];    /* ident bytes */
  39.     Elf32_Half    e_type;            /* file type */
  40.     Elf32_Half    e_machine;        /* target machine */
  41.     Elf32_Word    e_version;        /* file version */
  42.     Elf32_Addr    e_entry;        /* start address */
  43.     Elf32_Off    e_phoff;        /* phdr file offset */
  44.     Elf32_Off    e_shoff;        /* shdr file offset */
  45.     Elf32_Word    e_flags;        /* file flags */
  46.     Elf32_Half    e_ehsize;        /* sizeof ehdr */
  47.     Elf32_Half    e_phentsize;        /* sizeof phdr */
  48.     Elf32_Half    e_phnum;        /* number phdrs */
  49.     Elf32_Half    e_shentsize;        /* sizeof shdr */
  50.     Elf32_Half    e_shnum;        /* number shdrs */
  51.     Elf32_Half    e_shstrndx;        /* shdr string index */
  52. } Elf32_Ehdr;
  53.  
  54. #define EI_MAG0        0        /* e_ident[] indexes */
  55. #define EI_MAG1        1
  56. #define EI_MAG2        2
  57. #define EI_MAG3        3
  58. #define EI_CLASS    4
  59. #define EI_DATA        5
  60. #define EI_VERSION    6
  61. #define EI_PAD        7
  62.  
  63. #define ELFMAG0        0x7f        /* EI_MAG */
  64. #define ELFMAG1        'E'
  65. #define ELFMAG2        'L'
  66. #define ELFMAG3        'F'
  67. #define ELFMAG        "\177ELF"
  68. #define SELFMAG        4
  69.  
  70. #define ELFCLASSNONE    0        /* EI_CLASS */
  71. #define ELFCLASS32    1
  72. #define ELFCLASS64    2
  73. #define ELFCLASSNUM    3
  74.  
  75. #define ELFDATANONE    0        /* EI_DATA */
  76. #define ELFDATA2LSB    1
  77. #define ELFDATA2MSB    2
  78. #define ELFDATANUM    3
  79.  
  80. #define ET_NONE        0        /* e_type */
  81. #define ET_REL        1
  82. #define ET_EXEC        2
  83. #define ET_DYN        3
  84. #define ET_CORE        4
  85. #define ET_NUM        5
  86.  
  87. #define    ET_LOPROC    0xff00        /* processor specific range */
  88. #define    ET_HIPROC    0xffff
  89.  
  90. #define EM_NONE        0        /* e_machine */
  91. #define EM_M32        1        /* AT&T WE 32100 */
  92. #define EM_SPARC    2        /* Sun SPARC */
  93. #define EM_386        3        /* Intel 80386 */
  94. #define EM_68K        4        /* Motorola 68000 */
  95. #define EM_88K        5        /* Motorola 88000 */
  96. #define EM_486        6        /* Intel 80486 */
  97. #define EM_860        7        /* Intel i860 */
  98. #define EM_NUM        8
  99.  
  100.  
  101. #define EV_NONE        0        /* e_version, EI_VERSION */
  102. #define EV_CURRENT    1
  103. #define EV_NUM        2
  104.  
  105.  
  106. /*    Program header
  107.  */
  108.  
  109. typedef struct {
  110.     Elf32_Word    p_type;        /* entry type */
  111.     Elf32_Off    p_offset;    /* file offset */
  112.     Elf32_Addr    p_vaddr;    /* virtual address */
  113.     Elf32_Addr    p_paddr;    /* physical address */
  114.     Elf32_Word    p_filesz;    /* file size */
  115.     Elf32_Word    p_memsz;    /* memory size */
  116.     Elf32_Word    p_flags;    /* entry flags */
  117.     Elf32_Word    p_align;    /* memory/file alignment */
  118. } Elf32_Phdr;
  119.  
  120. #define PT_NULL        0        /* p_type */
  121. #define PT_LOAD        1
  122. #define PT_DYNAMIC    2
  123. #define PT_INTERP    3
  124. #define PT_NOTE        4
  125. #define PT_SHLIB    5
  126. #define PT_PHDR        6
  127. #define PT_NUM        7
  128.  
  129. #define PT_LOPROC    0x70000000    /* processor specific range */
  130. #define PT_HIPROC    0x7fffffff
  131.  
  132. #define PF_R        0x4        /* p_flags */
  133. #define PF_W        0x2
  134. #define PF_X        0x1
  135.  
  136. #define PF_MASKPROC    0xf0000000    /* processor specific values */
  137.  
  138.  
  139. /*    Section header
  140.  */
  141.  
  142. typedef struct {
  143.     Elf32_Word    sh_name;    /* section name */
  144.     Elf32_Word    sh_type;    /* SHT_... */
  145.     Elf32_Word    sh_flags;    /* SHF_... */
  146.     Elf32_Addr    sh_addr;    /* virtual address */
  147.     Elf32_Off    sh_offset;    /* file offset */
  148.     Elf32_Word    sh_size;    /* section size */
  149.     Elf32_Word    sh_link;    /* misc info */
  150.     Elf32_Word    sh_info;    /* misc info */
  151.     Elf32_Word    sh_addralign;    /* memory alignment */
  152.     Elf32_Word    sh_entsize;    /* entry size if table */
  153. } Elf32_Shdr;
  154.  
  155. #define SHT_NULL    0        /* sh_type */
  156. #define SHT_PROGBITS    1
  157. #define SHT_SYMTAB    2
  158. #define SHT_STRTAB    3
  159. #define SHT_RELA    4
  160. #define SHT_HASH    5
  161. #define SHT_DYNAMIC    6
  162. #define SHT_NOTE    7
  163. #define SHT_NOBITS    8
  164. #define SHT_REL        9
  165. #define SHT_SHLIB    10
  166. #define SHT_DYNSYM    11
  167. #define SHT_NUM        12
  168. #define SHT_LOUSER    0x80000000
  169. #define SHT_HIUSER    0xffffffff
  170.  
  171. #define    SHT_LOPROC    0x70000000    /* processor specific range */
  172. #define    SHT_HIPROC    0x7fffffff
  173.  
  174. #define SHF_WRITE    0x1        /* sh_flags */
  175. #define SHF_ALLOC    0x2
  176. #define SHF_EXECINSTR    0x4
  177.  
  178. #define SHF_MASKPROC    0xf0000000    /* processor specific values */
  179.  
  180. #define SHN_UNDEF    0        /* special section numbers */
  181. #define SHN_LORESERVE    0xff00
  182. #define SHN_ABS        0xfff1
  183. #define SHN_COMMON    0xfff2
  184. #define SHN_HIRESERVE    0xffff
  185.  
  186. #define SHN_LOPROC    0xff00        /* processor specific range */
  187. #define SHN_HIPROC    0xff1f
  188.  
  189.  
  190. /*    Symbol table
  191.  */
  192.  
  193. typedef struct {
  194.     Elf32_Word    st_name;
  195.     Elf32_Addr    st_value;
  196.     Elf32_Word    st_size;
  197.     unsigned char    st_info;    /* bind, type: ELF_32_ST_... */
  198.     unsigned char    st_other;
  199.     Elf32_Half    st_shndx;    /* SHN_... */
  200. } Elf32_Sym;
  201.  
  202. #define STN_UNDEF    0
  203.  
  204. /*    The macros compose and decompose values for S.st_info
  205.  *
  206.  *    bind = ELF32_ST_BIND(S.st_info)
  207.  *    type = ELF32_ST_TYPE(S.st_info)
  208.  *    S.st_info = ELF32_ST_INFO(bind, type)
  209.  */
  210.  
  211. #define ELF32_ST_BIND(info)        ((info) >> 4)
  212. #define ELF32_ST_TYPE(info)        ((info) & 0xf)
  213. #define ELF32_ST_INFO(bind,type)    (((bind)<<4)+((type)&0xf))
  214.  
  215. #define STB_LOCAL    0        /* BIND */
  216. #define STB_GLOBAL    1
  217. #define STB_WEAK    2
  218. #define STB_NUM        3
  219.  
  220. #define STB_LOPROC    13        /* processor specific range */
  221. #define STB_HIPROC    15
  222.  
  223. #define STT_NOTYPE    0        /* TYPE */
  224. #define STT_OBJECT    1
  225. #define STT_FUNC    2
  226. #define STT_SECTION    3
  227. #define STT_FILE    4
  228. #define STT_NUM        5
  229.  
  230. #define STT_LOPROC    13        /* processor specific range */
  231. #define STT_HIPROC    15
  232.  
  233.  
  234. /*    Relocation
  235.  */
  236.  
  237. typedef struct {
  238.     Elf32_Addr    r_offset;
  239.     Elf32_Word    r_info;        /* sym, type: ELF32_R_... */
  240. } Elf32_Rel;
  241.  
  242. typedef struct {
  243.     Elf32_Addr    r_offset;
  244.     Elf32_Word    r_info;        /* sym, type: ELF32_R_... */
  245.     Elf32_Sword    r_addend;
  246. } Elf32_Rela;
  247.  
  248. /*    The macros compose and decompose values for Rel.r_info, Rela.f_info
  249.  *
  250.  *    sym = ELF32_R_SYM(R.r_info)
  251.  *    type = ELF32_R_TYPE(R.r_info)
  252.  *    R.r_info = ELF32_R_INFO(sym, type)
  253.  */
  254.  
  255. #define ELF32_R_SYM(info)    ((info)>>8)
  256. #define ELF32_R_TYPE(info)    ((unsigned char)(info))
  257. #define ELF32_R_INFO(sym,type)    (((sym)<<8)+(unsigned char)(type))
  258.  
  259. #endif
  260.