1 /* 2 * Definitions needed for accessing Irix ELF headers 3 */ 4 typedef struct { 5 uchar ident[16]; /* ident bytes */ 6 ushort type; /* file type */ 7 ushort machine; /* target machine */ 8 int version; /* file version */ 9 ulong elfentry; /* start address */ 10 ulong phoff; /* phdr file offset */ 11 ulong shoff; /* shdr file offset */ 12 int flags; /* file flags */ 13 ushort ehsize; /* sizeof ehdr */ 14 ushort phentsize; /* sizeof phdr */ 15 ushort phnum; /* number phdrs */ 16 ushort shentsize; /* sizeof shdr */ 17 ushort shnum; /* number shdrs */ 18 ushort shstrndx; /* shdr string index */ 19 } Ehdr; 20 21 typedef struct { 22 int type; /* entry type */ 23 ulong offset; /* file offset */ 24 ulong vaddr; /* virtual address */ 25 ulong paddr; /* physical address */ 26 int filesz; /* file size */ 27 ulong memsz; /* memory size */ 28 int flags; /* entry flags */ 29 int align; /* memory/file alignment */ 30 } Phdr; 31 32 typedef struct { 33 ulong name; /* section name */ 34 ulong type; /* SHT_... */ 35 ulong flags; /* SHF_... */ 36 ulong addr; /* virtual address */ 37 ulong offset; /* file offset */ 38 ulong size; /* section size */ 39 ulong link; /* misc info */ 40 ulong info; /* misc info */ 41 ulong addralign; /* memory alignment */ 42 ulong entsize; /* entry size if table */ 43 } Shdr; 44 45 enum { 46 /* Ehdr codes */ 47 MAG0 = 0, /* ident[] indexes */ 48 MAG1 = 1, 49 MAG2 = 2, 50 MAG3 = 3, 51 CLASS = 4, 52 DATA = 5, 53 VERSION = 6, 54 55 ELFCLASSNONE = 0, /* ident[CLASS] */ 56 ELFCLASS32 = 1, 57 ELFCLASS64 = 2, 58 ELFCLASSNUM = 3, 59 60 ELFDATANONE = 0, /* ident[DATA] */ 61 ELFDATA2LSB = 1, 62 ELFDATA2MSB = 2, 63 ELFDATANUM = 3, 64 65 NOETYPE = 0, /* type */ 66 REL = 1, 67 EXEC = 2, 68 DYN = 3, 69 CORE = 4, 70 71 NONE = 0, /* machine */ 72 M32 = 1, /* AT&T WE 32100 */ 73 SPARC = 2, /* Sun SPARC */ 74 I386 = 3, /* Intel 80386 */ 75 M68K = 4, /* Motorola 68000 */ 76 M88K = 5, /* Motorola 88000 */ 77 I486 = 6, /* Intel 80486 */ 78 I860 = 7, /* Intel i860 */ 79 MIPS = 8, /* Mips R2000 */ 80 S370 = 9, /* Amdhal */ 81 SPARC64 = 18, /* Sun SPARC v9 */ 82 POWER = 20, /* PowerPC */ 83 POWER64 = 21, /* PowerPC64 */ 84 ARM = 40, /* ARM */ 85 AMD64 = 62, /* Amd64 */ 86 ARM64 = 183, /* ARM64 */ 87 RISCV = 243, /* RISC-V */ 88 89 NO_VERSION = 0, /* version, ident[VERSION] */ 90 CURRENT = 1, 91 92 /* Phdr Codes */ 93 NOPTYPE = 0, /* type */ 94 LOAD = 1, 95 DYNAMIC = 2, 96 INTERP = 3, 97 NOTE = 4, 98 SHLIB = 5, 99 PHDR = 6, 100 101 R = 0x4, /* flags */ 102 W = 0x2, 103 X = 0x1, 104 105 /* Shdr Codes */ 106 Progbits = 1, /* section types */ 107 Strtab = 3, 108 Nobits = 8, 109 110 Swrite = 1, /* section attributes */ 111 Salloc = 2, 112 Sexec = 4, 113 }; 114 115 #define ELF_MAG ((0x7f<<24) | ('E'<<16) | ('L'<<8) | 'F') 116