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 SPARC64 = 18, /* Sun SPARC v9 */ 49 POWER = 20, /* PowerPC */ 50 POWER64 = 21, /* PowerPC64 */ 51 ARM = 40, /* ARM */ 52 AMD64 = 62, /* Amd64 */ 53 ARM64 = 183, /* ARM64 */ 54 55 NO_VERSION = 0, /* version, ident[VERSION] */ 56 CURRENT = 1, 57 58 /* Phdr Codes */ 59 NOPTYPE = 0, /* type */ 60 PT_LOAD = 1, 61 DYNAMIC = 2, 62 INTERP = 3, 63 NOTE = 4, 64 SHLIB = 5, 65 PHDR = 6, 66 67 R = 0x4, /* flags */ 68 W = 0x2, 69 X = 0x1, 70 71 /* Shdr Codes */ 72 Progbits = 1, /* section types */ 73 Strtab = 3, 74 Nobits = 8, 75 76 Swrite = 1, /* section attributes (flags) */ 77 Salloc = 2, 78 Sexec = 4, 79 }; 80 81 typedef void (*Putl)(long); 82 83 void elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 84 void elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr, 85 ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align); 86 void elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags, 87 ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl, 88 ulong align, ulong entsz); 89 90 void elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 91 void elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type, 92 uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz, 93 ulong prots, uvlong align); 94 void elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name, 95 ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz, 96 ulong link, ulong addnl, uvlong align, uvlong entsz); 97