14fa3bc58SDavid du Colombier enum { 24fa3bc58SDavid du Colombier Ehdr32sz = 52, 34fa3bc58SDavid du Colombier Phdr32sz = 32, 44fa3bc58SDavid du Colombier Shdr32sz = 40, 54fa3bc58SDavid du Colombier 64fa3bc58SDavid du Colombier Ehdr64sz = 64, 74fa3bc58SDavid du Colombier Phdr64sz = 56, 84fa3bc58SDavid du Colombier Shdr64sz = 64, 94fa3bc58SDavid du Colombier }; 104fa3bc58SDavid du Colombier 114fa3bc58SDavid du Colombier /* from /sys/src/libmach/elf.h */ 124fa3bc58SDavid du Colombier enum { 134fa3bc58SDavid du Colombier /* Ehdr codes */ 144fa3bc58SDavid du Colombier MAG0 = 0, /* ident[] indexes */ 154fa3bc58SDavid du Colombier MAG1 = 1, 164fa3bc58SDavid du Colombier MAG2 = 2, 174fa3bc58SDavid du Colombier MAG3 = 3, 184fa3bc58SDavid du Colombier CLASS = 4, 194fa3bc58SDavid du Colombier DATA = 5, 204fa3bc58SDavid du Colombier VERSION = 6, 214fa3bc58SDavid du Colombier 224fa3bc58SDavid du Colombier ELFCLASSNONE = 0, /* ident[CLASS] */ 234fa3bc58SDavid du Colombier ELFCLASS32 = 1, 244fa3bc58SDavid du Colombier ELFCLASS64 = 2, 254fa3bc58SDavid du Colombier ELFCLASSNUM = 3, 264fa3bc58SDavid du Colombier 274fa3bc58SDavid du Colombier ELFDATANONE = 0, /* ident[DATA] */ 284fa3bc58SDavid du Colombier ELFDATA2LSB = 1, 294fa3bc58SDavid du Colombier ELFDATA2MSB = 2, 304fa3bc58SDavid du Colombier ELFDATANUM = 3, 314fa3bc58SDavid du Colombier 324fa3bc58SDavid du Colombier NOETYPE = 0, /* type */ 334fa3bc58SDavid du Colombier REL = 1, 344fa3bc58SDavid du Colombier EXEC = 2, 354fa3bc58SDavid du Colombier DYN = 3, 364fa3bc58SDavid du Colombier CORE = 4, 374fa3bc58SDavid du Colombier 384fa3bc58SDavid du Colombier NONE = 0, /* machine */ 394fa3bc58SDavid du Colombier M32 = 1, /* AT&T WE 32100 */ 404fa3bc58SDavid du Colombier SPARC = 2, /* Sun SPARC */ 414fa3bc58SDavid du Colombier I386 = 3, /* Intel 80386 */ 424fa3bc58SDavid du Colombier M68K = 4, /* Motorola 68000 */ 434fa3bc58SDavid du Colombier M88K = 5, /* Motorola 88000 */ 444fa3bc58SDavid du Colombier I486 = 6, /* Intel 80486 */ 454fa3bc58SDavid du Colombier I860 = 7, /* Intel i860 */ 464fa3bc58SDavid du Colombier MIPS = 8, /* Mips R2000 */ 474fa3bc58SDavid du Colombier S370 = 9, /* Amdhal */ 48*4439694fSDavid du Colombier MIPSR4K = 10, /* Mips R4000 */ 494fa3bc58SDavid du Colombier SPARC64 = 18, /* Sun SPARC v9 */ 504fa3bc58SDavid du Colombier POWER = 20, /* PowerPC */ 514fa3bc58SDavid du Colombier POWER64 = 21, /* PowerPC64 */ 524fa3bc58SDavid du Colombier ARM = 40, /* ARM */ 534fa3bc58SDavid du Colombier AMD64 = 62, /* Amd64 */ 544fa3bc58SDavid du Colombier ARM64 = 183, /* ARM64 */ 554fa3bc58SDavid du Colombier 564fa3bc58SDavid du Colombier NO_VERSION = 0, /* version, ident[VERSION] */ 574fa3bc58SDavid du Colombier CURRENT = 1, 584fa3bc58SDavid du Colombier 594fa3bc58SDavid du Colombier /* Phdr Codes */ 604fa3bc58SDavid du Colombier NOPTYPE = 0, /* type */ 614fa3bc58SDavid du Colombier PT_LOAD = 1, 624fa3bc58SDavid du Colombier DYNAMIC = 2, 634fa3bc58SDavid du Colombier INTERP = 3, 644fa3bc58SDavid du Colombier NOTE = 4, 654fa3bc58SDavid du Colombier SHLIB = 5, 664fa3bc58SDavid du Colombier PHDR = 6, 674fa3bc58SDavid du Colombier 684fa3bc58SDavid du Colombier R = 0x4, /* flags */ 694fa3bc58SDavid du Colombier W = 0x2, 704fa3bc58SDavid du Colombier X = 0x1, 714fa3bc58SDavid du Colombier 724fa3bc58SDavid du Colombier /* Shdr Codes */ 734fa3bc58SDavid du Colombier Progbits = 1, /* section types */ 744fa3bc58SDavid du Colombier Strtab = 3, 754fa3bc58SDavid du Colombier Nobits = 8, 764fa3bc58SDavid du Colombier 774fa3bc58SDavid du Colombier Swrite = 1, /* section attributes (flags) */ 784fa3bc58SDavid du Colombier Salloc = 2, 794fa3bc58SDavid du Colombier Sexec = 4, 804fa3bc58SDavid du Colombier }; 814fa3bc58SDavid du Colombier 824fa3bc58SDavid du Colombier typedef void (*Putl)(long); 834fa3bc58SDavid du Colombier 844fa3bc58SDavid du Colombier void elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 854fa3bc58SDavid du Colombier void elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr, 864fa3bc58SDavid du Colombier ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align); 874fa3bc58SDavid du Colombier void elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags, 884fa3bc58SDavid du Colombier ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl, 894fa3bc58SDavid du Colombier ulong align, ulong entsz); 904fa3bc58SDavid du Colombier 914fa3bc58SDavid du Colombier void elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl)); 924fa3bc58SDavid du Colombier void elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type, 934fa3bc58SDavid du Colombier uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz, 944fa3bc58SDavid du Colombier ulong prots, uvlong align); 954fa3bc58SDavid du Colombier void elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name, 964fa3bc58SDavid du Colombier ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz, 974fa3bc58SDavid du Colombier ulong link, ulong addnl, uvlong align, uvlong entsz); 98