Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

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