106 lines · 2.6 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ enum {	Ehdr32sz	= 52,	Phdr32sz	= 32,	Shdr32sz	= 40, 	Ehdr64sz	= 64,	Phdr64sz	= 56,	Shdr64sz	= 64,}; /* from /sys/src/libmach/elf.h */enum {	/* Ehdr codes */	MAG0 = 0,		/* ident[] indexes */	MAG1 = 1,	MAG2 = 2,	MAG3 = 3,	CLASS = 4,	DATA = 5,	VERSION = 6, 	ELFCLASSNONE = 0,	/* ident[CLASS] */	ELFCLASS32 = 1,	ELFCLASS64 = 2,	ELFCLASSNUM = 3, 	ELFDATANONE = 0,	/* ident[DATA] */	ELFDATA2LSB = 1,	ELFDATA2MSB = 2,	ELFDATANUM = 3, 	NOETYPE = 0,		/* type */	REL = 1,	EXEC = 2,	DYN = 3,	CORE = 4, 	NONE = 0,		/* machine */	M32 = 1,		/* AT&T WE 32100 */	SPARC = 2,		/* Sun SPARC */	I386 = 3,		/* Intel 80386 */	M68K = 4,		/* Motorola 68000 */	M88K = 5,		/* Motorola 88000 */	I486 = 6,		/* Intel 80486 */	I860 = 7,		/* Intel i860 */	MIPS = 8,		/* Mips R2000 */	S370 = 9,		/* Amdhal	*/	MIPSR4K = 10,		/* Mips R4000 */	SPARC64 = 18,		/* Sun SPARC v9 */	POWER = 20,		/* PowerPC */	POWER64 = 21,		/* PowerPC64 */	ARM = 40,		/* ARM */	AMD64 = 62,		/* Amd64 */	ARM64 = 183,		/* ARM64 */ 	NO_VERSION = 0,		/* version, ident[VERSION] */	CURRENT = 1, 	/* Phdr Codes */	NOPTYPE = 0,		/* type */	PT_LOAD = 1,	DYNAMIC = 2,	INTERP = 3,	NOTE = 4,	SHLIB = 5,	PHDR = 6, 	R = 0x4,		/* flags */	W = 0x2,	X = 0x1, 	/* Shdr Codes */	Progbits = 1,	/* section types */	Strtab = 3,	Nobits = 8, 	Swrite = 1,	/* section attributes (flags) */	Salloc = 2,	Sexec = 4,}; typedef void (*Putl)(long); void	elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl));void	elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr,	ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align);void	elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags,	ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl,	ulong align, ulong entsz); void	elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl));void	elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type,	uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz,	ulong prots, uvlong align);void	elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name,	ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz,	ulong link, ulong addnl, uvlong align, uvlong entsz);