Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 *	Definitions needed for accessing ELF headers
3
 */
4
typedef struct {
5
	uchar	ident[16];	/* ident bytes */
6
	ushort	type;		/* file type */
7
	ushort	machine;	/* target machine */
8
	int	version;	/* file version */
9
	ulong	elfentry;	/* start address */
10
	ulong	phoff;		/* phdr file offset */
11
	ulong	shoff;		/* shdr file offset */
12
	int	flags;		/* file flags */
13
	ushort	ehsize;		/* sizeof ehdr */
14
	ushort	phentsize;	/* sizeof phdr */
15
	ushort	phnum;		/* number phdrs */
16
	ushort	shentsize;	/* sizeof shdr */
17
	ushort	shnum;		/* number shdrs */
18
	ushort	shstrndx;	/* shdr string index */
19
} Ehdr;
20
 
21
typedef struct {
22
	u8int	ident[16];	/* ident bytes */
23
	u16int	type;		/* file type */
24
	u16int	machine;	/* target machine */
25
	u32int	version;	/* file version */
26
	u64int	elfentry;	/* start address */
27
	u64int	phoff;		/* phdr file offset */
28
	u64int	shoff;		/* shdr file offset */
29
	u32int	flags;		/* file flags */
30
	u16int	ehsize;		/* sizeof ehdr */
31
	u16int	phentsize;	/* sizeof phdr */
32
	u16int	phnum;		/* number phdrs */
33
	u16int	shentsize;	/* sizeof shdr */
34
	u16int	shnum;		/* number shdrs */
35
	u16int	shstrndx;	/* shdr string index */
36
} E64hdr;
37
 
38
typedef struct {
39
	int	type;		/* entry type */
40
	ulong	offset;		/* file offset */
41
	ulong	vaddr;		/* virtual address */
42
	ulong	paddr;		/* physical address */
43
	int	filesz;		/* file size */
44
	ulong	memsz;		/* memory size */
45
	int	flags;		/* entry flags */
46
	int	align;		/* memory/file alignment */
47
} Phdr;
48
 
49
typedef struct {
50
	u32int	type;		/* entry type */
51
	u32int	flags;		/* entry flags */
52
	u64int	offset;		/* file offset */
53
	u64int	vaddr;		/* virtual address */
54
	u64int	paddr;		/* physical address */
55
	u64int	filesz;		/* file size */
56
	u64int	memsz;		/* memory size */
57
	u64int	align;		/* memory/file alignment */
58
} P64hdr;
59
 
60
typedef struct {
61
	ulong	name;		/* section name */
62
	ulong	type;		/* SHT_... */
63
	ulong	flags;		/* SHF_... */
64
	ulong	addr;		/* virtual address */
65
	ulong	offset;		/* file offset */
66
	ulong	size;		/* section size */
67
	ulong	link;		/* misc info */
68
	ulong	info;		/* misc info */
69
	ulong	addralign;	/* memory alignment */
70
	ulong	entsize;	/* entry size if table */
71
} Shdr;
72
 
73
typedef struct {
74
	u32int	name;		/* section name */
75
	u32int	type;		/* SHT_... */
76
	u64int	flags;		/* SHF_... */
77
	u64int	addr;		/* virtual address */
78
	u64int	offset;		/* file offset */
79
	u64int	size;		/* section size */
80
	u32int	link;		/* misc info */
81
	u32int	info;		/* misc info */
82
	u64int	addralign;	/* memory alignment */
83
	u64int	entsize;	/* entry size if table */
84
} S64hdr;
85
 
86
enum {
87
	/* Ehdr codes */
88
	MAG0 = 0,		/* ident[] indexes */
89
	MAG1 = 1,
90
	MAG2 = 2,
91
	MAG3 = 3,
92
	CLASS = 4,
93
	DATA = 5,
94
	VERSION = 6,
95
 
96
	ELFCLASSNONE = 0,	/* ident[CLASS] */
97
	ELFCLASS32 = 1,
98
	ELFCLASS64 = 2,
99
	ELFCLASSNUM = 3,
100
 
101
	ELFDATANONE = 0,	/* ident[DATA] */
102
	ELFDATA2LSB = 1,
103
	ELFDATA2MSB = 2,
104
	ELFDATANUM = 3,
105
 
106
	NOETYPE = 0,		/* type */
107
	REL = 1,
108
	EXEC = 2,
109
	DYN = 3,
110
	CORE = 4,
111
 
112
	NONE = 0,		/* machine */
113
	M32 = 1,		/* AT&T WE 32100 */
114
	SPARC = 2,		/* Sun SPARC */
115
	I386 = 3,		/* Intel 80386 */
116
	M68K = 4,		/* Motorola 68000 */
117
	M88K = 5,		/* Motorola 88000 */
118
	I486 = 6,		/* Intel 80486 */
119
	I860 = 7,		/* Intel i860 */
120
	MIPS = 8,		/* Mips R2000 */
121
	S370 = 9,		/* Amdhal	*/
122
	MIPSR4K = 10,		/* Mips R4000 */
123
	SPARC64 = 18,		/* Sun SPARC v9 */
124
	POWER = 20,		/* PowerPC */
125
	POWER64 = 21,		/* PowerPC64 */
126
	ARM = 40,		/* ARM */
127
	AMD64 = 62,		/* Amd64 */
128
	ARM64 = 183,		/* ARM64 */
129
 
130
	NO_VERSION = 0,		/* version, ident[VERSION] */
131
	CURRENT = 1,
132
 
133
	/* Phdr Codes */
134
	NOPTYPE = 0,		/* type */
135
	LOAD = 1,
136
	DYNAMIC = 2,
137
	INTERP = 3,
138
	NOTE = 4,
139
	SHLIB = 5,
140
	PHDR = 6,
141
 
142
	R = 0x4,		/* flags */
143
	W = 0x2,
144
	X = 0x1,
145
 
146
	/* Shdr Codes */
147
	Progbits = 1,	/* section types */
148
	Strtab = 3,
149
	Nobits = 8,
150
 
151
	Swrite = 1,	/* section attributes */
152
	Salloc = 2,
153
	Sexec = 4,
154
};
155
 
156
#define	ELF_MAG		((0x7f<<24) | ('E'<<16) | ('L'<<8) | 'F')