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