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