1 enum { 2 Ehdr32sz = 52, 3 Phdr32sz = 32, 4 Shdr32sz = 40, 5 6 Ehdr64sz = 64, 7 Phdr64sz = 56, 8 Shdr64sz = 64, 9 }; 10 11 /* from /sys/src/libmach/elf.h */ 12 enum { 13 /* Ehdr codes */ 14 MAG0 = 0, /* ident[] indexes */ 15 MAG1 = 1, 16 MAG2 = 2, 17 MAG3 = 3, 18 CLASS = 4, 19 DATA = 5, 20 VERSION = 6, 21 22 ELFCLASSNONE = 0, /* ident[CLASS] */ 23 ELFCLASS32 = 1, 24 ELFCLASS64 = 2, 25 ELFCLASSNUM = 3, 26 27 ELFDATANONE = 0, /* ident[DATA] */ 28 ELFDATA2LSB = 1, 29 ELFDATA2MSB = 2, 30 ELFDATANUM = 3, 31 32 NOETYPE = 0, /* type */ 33 REL = 1, 34 EXEC = 2, 35 DYN = 3, 36 CORE = 4, 37 38 NONE = 0, /* machine */ 39 M32 = 1, /* AT&T WE 32100 */ 40 SPARC = 2, /* Sun SPARC */ 41 I386 = 3, /* Intel 80386 */ 42 M68K = 4, /* Motorola 68000 */ 43 M88K = 5, /* Motorola 88000 */ 44 I486 = 6, /* Intel 80486 */ 45 I860 = 7, /* Intel i860 */ 46 MIPS = 8, /* Mips R2000 */ 47 S370 = 9, /* Amdhal */ 48 MIPSR4K = 10, /* Mips R4000 */ 49 SPARC64 = 18, /* Sun SPARC v9 */ 50 POWER = 20, /* PowerPC */ 51 POWER64 = 21, /* PowerPC64 */ 52 ARM = 40, /* ARM */ 53 AMD64 = 62, /* Amd64 */ 54 ARM64 = 183, /* ARM64 */ 55 56 NO_VERSION = 0, /* version, ident[VERSION] */ 57 CURRENT = 1, 58 59 /* Phdr Codes */ 60 NOPTYPE = 0, /* type */ 61 PT_LOAD = 1, 62 DYNAMIC = 2, 63 INTERP = 3, 64 NOTE = 4, 65 SHLIB = 5, 66 PHDR = 6, 67 68 R = 0x4, /* flags */ 69 W = 0x2, 70 X = 0x1, 71 72 /* Shdr Codes */ 73 Progbits = 1, /* section types */ 74 Strtab = 3, 75 Nobits = 8, 76 77 Swrite = 1, /* section attributes (flags) */ 78 Salloc = 2, 79 Sexec = 4, 80 }; 81 82 typedef void (*Putl)(long); 83 84 void elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 85 void elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr, 86 ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align); 87 void elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags, 88 ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl, 89 ulong align, ulong entsz); 90 91 void elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 92 void elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type, 93 uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz, 94 ulong prots, uvlong align); 95 void elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name, 96 ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz, 97 ulong link, ulong addnl, uvlong align, uvlong entsz); 98