|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1995, 1994, 1993, 1992, 1991, 1990 ! 3: * Open Software Foundation, Inc. ! 4: * ! 5: * Permission to use, copy, modify, and distribute this software and ! 6: * its documentation for any purpose and without fee is hereby granted, ! 7: * provided that the above copyright notice appears in all copies and ! 8: * that both the copyright notice and this permission notice appear in ! 9: * supporting documentation, and that the name of ("OSF") or Open Software ! 10: * Foundation not be used in advertising or publicity pertaining to ! 11: * distribution of the software without specific, written prior permission. ! 12: * ! 13: * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE ! 14: * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ! 15: * FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL OSF BE LIABLE FOR ANY ! 16: * SPECIAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! 17: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ! 18: * ACTION OF CONTRACT, NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING ! 19: * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE ! 20: * ! 21: */ ! 22: /* ! 23: * OSF Research Institute MK6.1 (unencumbered) 1/31/1995 ! 24: */ ! 25: #ifndef _MACH_EXEC_ELF_H_ ! 26: #define _MACH_EXEC_ELF_H_ ! 27: ! 28: #include <mach/machine/exec/elf.h> ! 29: ! 30: /* ELF Header - figure 4-3, page 4-4 */ ! 31: ! 32: #define EI_NIDENT 16 ! 33: ! 34: typedef struct { ! 35: unsigned char e_ident[EI_NIDENT]; ! 36: Elf32_Half e_type; ! 37: Elf32_Half e_machine; ! 38: Elf32_Word e_version; ! 39: Elf32_Addr e_entry; ! 40: Elf32_Off e_phoff; ! 41: Elf32_Off e_shoff; ! 42: Elf32_Word e_flags; ! 43: Elf32_Half e_ehsize; ! 44: Elf32_Half e_phentsize; ! 45: Elf32_Half e_phnum; ! 46: Elf32_Half e_shentsize; ! 47: Elf32_Half e_shnum; ! 48: Elf32_Half e_shstrndx; ! 49: } Elf32_Ehdr; ! 50: ! 51: ! 52: /* e_ident[] identification indexes - figure 4-4, page 4-7 */ ! 53: ! 54: #define EI_MAG0 0 ! 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: /* magic number - pg 4-8 */ ! 64: ! 65: #define ELFMAG0 0x7f ! 66: #define ELFMAG1 'E' ! 67: #define ELFMAG2 'L' ! 68: #define ELFMAG3 'F' ! 69: ! 70: /* file class or capacity - page 4-8 */ ! 71: ! 72: #define ELFCLASSNONE 0 ! 73: #define ELFCLASS32 1 ! 74: #define ELFCLASS64 2 ! 75: ! 76: /* date encoding - page 4-9 */ ! 77: ! 78: #define ELFDATANONE 0 ! 79: #define ELFDATA2LSB 1 ! 80: #define ELFDATA2MSB 2 ! 81: ! 82: /* object file types - page 4-5 */ ! 83: ! 84: #define ET_NONE 0 ! 85: #define ET_REL 1 ! 86: #define ET_EXEC 2 ! 87: #define ET_DYN 3 ! 88: #define ET_CORE 4 ! 89: ! 90: #define ET_LOPROC 0xff00 ! 91: #define ET_HIPROC 0xffff ! 92: ! 93: /* architecture - page 4-5 */ ! 94: ! 95: #define EM_NONE 0 ! 96: #define EM_M32 1 ! 97: #define EM_SPARC 2 ! 98: #define EM_386 3 ! 99: #define EM_68K 4 ! 100: #define EM_88K 5 ! 101: #define EM_860 7 ! 102: #define EM_MIPS 8 ! 103: #define EM_MIPS_RS4_BE 10 ! 104: #define EM_SPARC64 11 ! 105: #define EM_PARISC 15 ! 106: #define EM_PPC 20 ! 107: ! 108: /* version - page 4-6 */ ! 109: ! 110: #define EV_NONE 0 ! 111: #define EV_CURRENT 1 ! 112: ! 113: /* special section indexes - page 4-11, figure 4-7 */ ! 114: ! 115: #define SHN_UNDEF 0 ! 116: #define SHN_LORESERVE 0xff00 ! 117: #define SHN_LOPROC 0xff00 ! 118: #define SHN_HIPROC 0xff1f ! 119: #define SHN_ABS 0xfff1 ! 120: #define SHN_COMMON 0xfff2 ! 121: #define SHN_HIRESERVE 0xffff ! 122: ! 123: /* section header - page 4-13, figure 4-8 */ ! 124: ! 125: typedef struct { ! 126: Elf32_Word sh_name; ! 127: Elf32_Word sh_type; ! 128: Elf32_Word sh_flags; ! 129: Elf32_Addr sh_addr; ! 130: Elf32_Off sh_offset; ! 131: Elf32_Word sh_size; ! 132: Elf32_Word sh_link; ! 133: Elf32_Word sh_info; ! 134: Elf32_Word sh_addralign; ! 135: Elf32_Word sh_entsize; ! 136: } Elf32_Shdr; ! 137: ! 138: /* section types - page 4-15, figure 4-9 */ ! 139: ! 140: #define SHT_NULL 0 ! 141: #define SHT_PROGBITS 1 ! 142: #define SHT_SYMTAB 2 ! 143: #define SHT_STRTAB 3 ! 144: #define SHT_RELA 4 ! 145: #define SHT_HASH 5 ! 146: #define SHT_DYNAMIC 6 ! 147: #define SHT_NOTE 7 ! 148: #define SHT_NOBITS 8 ! 149: #define SHT_REL 9 ! 150: #define SHT_SHLIB 10 ! 151: #define SHT_DYNSYM 11 ! 152: ! 153: #define SHT_LOPROC 0x70000000 ! 154: #define SHT_HIPROC 0x7fffffff ! 155: #define SHT_LOUSER 0x80000000 ! 156: #define SHT_HIUSER 0xffffffff ! 157: ! 158: /* section attribute flags - page 4-18, figure 4-11 */ ! 159: ! 160: #define SHF_WRITE 0x1 ! 161: #define SHF_ALLOC 0x2 ! 162: #define SHF_EXECINSTR 0x4 ! 163: #define SHF_MASKPROC 0xf0000000 ! 164: ! 165: /* symbol table - page 4-25, figure 4-15 */ ! 166: typedef struct ! 167: { ! 168: Elf32_Word st_name; ! 169: Elf32_Addr st_value; ! 170: Elf32_Word st_size; ! 171: unsigned char st_info; ! 172: unsigned char st_other; ! 173: Elf32_Half st_shndx; ! 174: } Elf32_Sym; ! 175: ! 176: /* symbol type and binding attributes - page 4-26 */ ! 177: ! 178: #define ELF32_ST_BIND(i) ((i) >> 4) ! 179: #define ELF32_ST_TYPE(i) ((i) & 0xf) ! 180: #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) ! 181: ! 182: /* symbol binding - page 4-26, figure 4-16 */ ! 183: ! 184: #define STB_LOCAL 0 ! 185: #define STB_GLOBAL 1 ! 186: #define STB_WEAK 2 ! 187: #define STB_LOPROC 13 ! 188: #define STB_HIPROC 15 ! 189: ! 190: /* symbol types - page 4-28, figure 4-17 */ ! 191: ! 192: #define STT_NOTYPE 0 ! 193: #define STT_OBJECT 1 ! 194: #define STT_FUNC 2 ! 195: #define STT_SECTION 3 ! 196: #define STT_FILE 4 ! 197: #define STT_LOPROC 13 ! 198: #define STT_HIPROC 15 ! 199: ! 200: ! 201: /* relocation entries - page 4-31, figure 4-19 */ ! 202: ! 203: typedef struct ! 204: { ! 205: Elf32_Addr r_offset; ! 206: Elf32_Word r_info; ! 207: } Elf32_Rel; ! 208: ! 209: typedef struct ! 210: { ! 211: Elf32_Addr r_offset; ! 212: Elf32_Word r_info; ! 213: Elf32_Sword r_addend; ! 214: } Elf32_Rela; ! 215: ! 216: /* Macros to split/combine relocation type and symbol page 4-32 */ ! 217: ! 218: #define ELF32_R_SYM(__i) ((__i)>>8) ! 219: #define ELF32_R_TYPE(__i) ((unsigned char) (__i)) ! 220: #define ELF32_R_INFO(__s, __t) (((__s)<<8) + (unsigned char) (__t)) ! 221: ! 222: ! 223: /* program header - page 5-2, figure 5-1 */ ! 224: ! 225: typedef struct { ! 226: Elf32_Word p_type; ! 227: Elf32_Off p_offset; ! 228: Elf32_Addr p_vaddr; ! 229: Elf32_Addr p_paddr; ! 230: Elf32_Word p_filesz; ! 231: Elf32_Word p_memsz; ! 232: Elf32_Word p_flags; ! 233: Elf32_Word p_align; ! 234: } Elf32_Phdr; ! 235: ! 236: /* segment types - page 5-3, figure 5-2 */ ! 237: ! 238: #define PT_NULL 0 ! 239: #define PT_LOAD 1 ! 240: #define PT_DYNAMIC 2 ! 241: #define PT_INTERP 3 ! 242: #define PT_NOTE 4 ! 243: #define PT_SHLIB 5 ! 244: #define PT_PHDR 6 ! 245: ! 246: #define PT_LOPROC 0x70000000 ! 247: #define PT_HIPROC 0x7fffffff ! 248: ! 249: /* segment permissions - page 5-6 */ ! 250: ! 251: #define PF_X 0x1 ! 252: #define PF_W 0x2 ! 253: #define PF_R 0x4 ! 254: #define PF_MASKPROC 0xf0000000 ! 255: ! 256: ! 257: /* dynamic structure - page 5-15, figure 5-9 */ ! 258: ! 259: typedef struct { ! 260: Elf32_Sword d_tag; ! 261: union { ! 262: Elf32_Word d_val; ! 263: Elf32_Addr d_ptr; ! 264: } d_un; ! 265: } Elf32_Dyn; ! 266: ! 267: /* Dynamic array tags - page 5-16, figure 5-10. */ ! 268: ! 269: #define DT_NULL 0 ! 270: #define DT_NEEDED 1 ! 271: #define DT_PLTRELSZ 2 ! 272: #define DT_PLTGOT 3 ! 273: #define DT_HASH 4 ! 274: #define DT_STRTAB 5 ! 275: #define DT_SYMTAB 6 ! 276: #define DT_RELA 7 ! 277: #define DT_RELASZ 8 ! 278: #define DT_RELAENT 9 ! 279: #define DT_STRSZ 10 ! 280: #define DT_SYMENT 11 ! 281: #define DT_INIT 12 ! 282: #define DT_FINI 13 ! 283: #define DT_SONAME 14 ! 284: #define DT_RPATH 15 ! 285: #define DT_SYMBOLIC 16 ! 286: #define DT_REL 17 ! 287: #define DT_RELSZ 18 ! 288: #define DT_RELENT 19 ! 289: #define DT_PLTREL 20 ! 290: #define DT_DEBUG 21 ! 291: #define DT_TEXTREL 22 ! 292: #define DT_JMPREL 23 ! 293: ! 294: /* ! 295: * Bootstrap doesn't need machine dependent extensions. ! 296: */ ! 297: ! 298: #endif /* _MACH_EXEC_ELF_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.