xref: /onnv-gate/usr/src/grub/grub-0.97/netboot/elf.h (revision 8044:b3af80bbf173)
1*8044SWilliam.Kucharski@Sun.COM #ifndef ELF_H
2*8044SWilliam.Kucharski@Sun.COM #define ELF_H
3*8044SWilliam.Kucharski@Sun.COM 
4*8044SWilliam.Kucharski@Sun.COM #define EI_NIDENT	16	/* Size of e_ident array. */
5*8044SWilliam.Kucharski@Sun.COM 
6*8044SWilliam.Kucharski@Sun.COM /* Values for e_type. */
7*8044SWilliam.Kucharski@Sun.COM #define ET_NONE		0	/* No file type */
8*8044SWilliam.Kucharski@Sun.COM #define ET_REL		1	/* Relocatable file */
9*8044SWilliam.Kucharski@Sun.COM #define ET_EXEC		2	/* Executable file */
10*8044SWilliam.Kucharski@Sun.COM #define ET_DYN		3	/* Shared object file */
11*8044SWilliam.Kucharski@Sun.COM #define ET_CORE		4	/* Core file */
12*8044SWilliam.Kucharski@Sun.COM 
13*8044SWilliam.Kucharski@Sun.COM /* Values for e_machine (architecute). */
14*8044SWilliam.Kucharski@Sun.COM #define EM_NONE		 0		/* No machine */
15*8044SWilliam.Kucharski@Sun.COM #define EM_M32		 1		/* AT&T WE 32100 */
16*8044SWilliam.Kucharski@Sun.COM #define EM_SPARC	 2		/* SUN SPARC */
17*8044SWilliam.Kucharski@Sun.COM #define EM_386		 3		/* Intel 80386+ */
18*8044SWilliam.Kucharski@Sun.COM #define EM_68K		 4		/* Motorola m68k family */
19*8044SWilliam.Kucharski@Sun.COM #define EM_88K		 5		/* Motorola m88k family */
20*8044SWilliam.Kucharski@Sun.COM #define EM_486		 6		/* Perhaps disused */
21*8044SWilliam.Kucharski@Sun.COM #define EM_860		 7		/* Intel 80860 */
22*8044SWilliam.Kucharski@Sun.COM #define EM_MIPS		 8		/* MIPS R3000 big-endian */
23*8044SWilliam.Kucharski@Sun.COM #define EM_S370		 9		/* IBM System/370 */
24*8044SWilliam.Kucharski@Sun.COM #define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */
25*8044SWilliam.Kucharski@Sun.COM 
26*8044SWilliam.Kucharski@Sun.COM #define EM_PARISC	15		/* HPPA */
27*8044SWilliam.Kucharski@Sun.COM #define EM_VPP500	17		/* Fujitsu VPP500 */
28*8044SWilliam.Kucharski@Sun.COM #define EM_SPARC32PLUS	18		/* Sun's "v8plus" */
29*8044SWilliam.Kucharski@Sun.COM #define EM_960		19		/* Intel 80960 */
30*8044SWilliam.Kucharski@Sun.COM #define EM_PPC		20		/* PowerPC */
31*8044SWilliam.Kucharski@Sun.COM #define EM_PPC64	21		/* PowerPC 64-bit */
32*8044SWilliam.Kucharski@Sun.COM #define EM_S390		22		/* IBM S390 */
33*8044SWilliam.Kucharski@Sun.COM 
34*8044SWilliam.Kucharski@Sun.COM #define EM_V800		36		/* NEC V800 series */
35*8044SWilliam.Kucharski@Sun.COM #define EM_FR20		37		/* Fujitsu FR20 */
36*8044SWilliam.Kucharski@Sun.COM #define EM_RH32		38		/* TRW RH-32 */
37*8044SWilliam.Kucharski@Sun.COM #define EM_RCE		39		/* Motorola RCE */
38*8044SWilliam.Kucharski@Sun.COM #define EM_ARM		40		/* ARM */
39*8044SWilliam.Kucharski@Sun.COM #define EM_FAKE_ALPHA	41		/* Digital Alpha */
40*8044SWilliam.Kucharski@Sun.COM #define EM_SH		42		/* Hitachi SH */
41*8044SWilliam.Kucharski@Sun.COM #define EM_SPARCV9	43		/* SPARC v9 64-bit */
42*8044SWilliam.Kucharski@Sun.COM #define EM_TRICORE	44		/* Siemens Tricore */
43*8044SWilliam.Kucharski@Sun.COM #define EM_ARC		45		/* Argonaut RISC Core */
44*8044SWilliam.Kucharski@Sun.COM #define EM_H8_300	46		/* Hitachi H8/300 */
45*8044SWilliam.Kucharski@Sun.COM #define EM_H8_300H	47		/* Hitachi H8/300H */
46*8044SWilliam.Kucharski@Sun.COM #define EM_H8S		48		/* Hitachi H8S */
47*8044SWilliam.Kucharski@Sun.COM #define EM_H8_500	49		/* Hitachi H8/500 */
48*8044SWilliam.Kucharski@Sun.COM #define EM_IA_64	50		/* Intel Merced */
49*8044SWilliam.Kucharski@Sun.COM #define EM_MIPS_X	51		/* Stanford MIPS-X */
50*8044SWilliam.Kucharski@Sun.COM #define EM_COLDFIRE	52		/* Motorola Coldfire */
51*8044SWilliam.Kucharski@Sun.COM #define EM_68HC12	53		/* Motorola M68HC12 */
52*8044SWilliam.Kucharski@Sun.COM #define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/
53*8044SWilliam.Kucharski@Sun.COM #define EM_PCP		55		/* Siemens PCP */
54*8044SWilliam.Kucharski@Sun.COM #define EM_NCPU		56		/* Sony nCPU embeeded RISC */
55*8044SWilliam.Kucharski@Sun.COM #define EM_NDR1		57		/* Denso NDR1 microprocessor */
56*8044SWilliam.Kucharski@Sun.COM #define EM_STARCORE	58		/* Motorola Start*Core processor */
57*8044SWilliam.Kucharski@Sun.COM #define EM_ME16		59		/* Toyota ME16 processor */
58*8044SWilliam.Kucharski@Sun.COM #define EM_ST100	60		/* STMicroelectronic ST100 processor */
59*8044SWilliam.Kucharski@Sun.COM #define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/
60*8044SWilliam.Kucharski@Sun.COM #define EM_X86_64	62		/* AMD x86-64 architecture */
61*8044SWilliam.Kucharski@Sun.COM #define EM_PDSP		63		/* Sony DSP Processor */
62*8044SWilliam.Kucharski@Sun.COM 
63*8044SWilliam.Kucharski@Sun.COM #define EM_FX66		66		/* Siemens FX66 microcontroller */
64*8044SWilliam.Kucharski@Sun.COM #define EM_ST9PLUS	67		/* STMicroelectronics ST9+ 8/16 mc */
65*8044SWilliam.Kucharski@Sun.COM #define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */
66*8044SWilliam.Kucharski@Sun.COM #define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */
67*8044SWilliam.Kucharski@Sun.COM #define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */
68*8044SWilliam.Kucharski@Sun.COM #define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */
69*8044SWilliam.Kucharski@Sun.COM #define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */
70*8044SWilliam.Kucharski@Sun.COM #define EM_SVX		73		/* Silicon Graphics SVx */
71*8044SWilliam.Kucharski@Sun.COM #define EM_AT19		74		/* STMicroelectronics ST19 8 bit mc */
72*8044SWilliam.Kucharski@Sun.COM #define EM_VAX		75		/* Digital VAX */
73*8044SWilliam.Kucharski@Sun.COM #define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */
74*8044SWilliam.Kucharski@Sun.COM #define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */
75*8044SWilliam.Kucharski@Sun.COM #define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */
76*8044SWilliam.Kucharski@Sun.COM #define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */
77*8044SWilliam.Kucharski@Sun.COM #define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */
78*8044SWilliam.Kucharski@Sun.COM #define EM_HUANY	81		/* Harvard University machine-independent object files */
79*8044SWilliam.Kucharski@Sun.COM #define EM_PRISM	82		/* SiTera Prism */
80*8044SWilliam.Kucharski@Sun.COM #define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */
81*8044SWilliam.Kucharski@Sun.COM #define EM_FR30		84		/* Fujitsu FR30 */
82*8044SWilliam.Kucharski@Sun.COM #define EM_D10V		85		/* Mitsubishi D10V */
83*8044SWilliam.Kucharski@Sun.COM #define EM_D30V		86		/* Mitsubishi D30V */
84*8044SWilliam.Kucharski@Sun.COM #define EM_V850		87		/* NEC v850 */
85*8044SWilliam.Kucharski@Sun.COM #define EM_M32R		88		/* Mitsubishi M32R */
86*8044SWilliam.Kucharski@Sun.COM #define EM_MN10300	89		/* Matsushita MN10300 */
87*8044SWilliam.Kucharski@Sun.COM #define EM_MN10200	90		/* Matsushita MN10200 */
88*8044SWilliam.Kucharski@Sun.COM #define EM_PJ		91		/* picoJava */
89*8044SWilliam.Kucharski@Sun.COM #define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
90*8044SWilliam.Kucharski@Sun.COM #define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
91*8044SWilliam.Kucharski@Sun.COM #define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
92*8044SWilliam.Kucharski@Sun.COM #define EM_NUM		95
93*8044SWilliam.Kucharski@Sun.COM 
94*8044SWilliam.Kucharski@Sun.COM /* Values for p_type. */
95*8044SWilliam.Kucharski@Sun.COM #define PT_NULL		0	/* Unused entry. */
96*8044SWilliam.Kucharski@Sun.COM #define PT_LOAD		1	/* Loadable segment. */
97*8044SWilliam.Kucharski@Sun.COM #define PT_DYNAMIC	2	/* Dynamic linking information segment. */
98*8044SWilliam.Kucharski@Sun.COM #define PT_INTERP	3	/* Pathname of interpreter. */
99*8044SWilliam.Kucharski@Sun.COM #define PT_NOTE		4	/* Auxiliary information. */
100*8044SWilliam.Kucharski@Sun.COM #define PT_SHLIB	5	/* Reserved (not used). */
101*8044SWilliam.Kucharski@Sun.COM #define PT_PHDR		6	/* Location of program header itself. */
102*8044SWilliam.Kucharski@Sun.COM 
103*8044SWilliam.Kucharski@Sun.COM /* Values for p_flags. */
104*8044SWilliam.Kucharski@Sun.COM #define PF_X		0x1	/* Executable. */
105*8044SWilliam.Kucharski@Sun.COM #define PF_W		0x2	/* Writable. */
106*8044SWilliam.Kucharski@Sun.COM #define PF_R		0x4	/* Readable. */
107*8044SWilliam.Kucharski@Sun.COM 
108*8044SWilliam.Kucharski@Sun.COM 
109*8044SWilliam.Kucharski@Sun.COM #define	ELF_PROGRAM_RETURNS_BIT	0x8000000	/* e_flags bit 31 */
110*8044SWilliam.Kucharski@Sun.COM 
111*8044SWilliam.Kucharski@Sun.COM #define EI_MAG0		0
112*8044SWilliam.Kucharski@Sun.COM #define ELFMAG0		0x7f
113*8044SWilliam.Kucharski@Sun.COM 
114*8044SWilliam.Kucharski@Sun.COM #define EI_MAG1		1
115*8044SWilliam.Kucharski@Sun.COM #define ELFMAG1		'E'
116*8044SWilliam.Kucharski@Sun.COM 
117*8044SWilliam.Kucharski@Sun.COM #define EI_MAG2		2
118*8044SWilliam.Kucharski@Sun.COM #define ELFMAG2		'L'
119*8044SWilliam.Kucharski@Sun.COM 
120*8044SWilliam.Kucharski@Sun.COM #define EI_MAG3		3
121*8044SWilliam.Kucharski@Sun.COM #define ELFMAG3		'F'
122*8044SWilliam.Kucharski@Sun.COM 
123*8044SWilliam.Kucharski@Sun.COM #define ELFMAG		"\177ELF"
124*8044SWilliam.Kucharski@Sun.COM 
125*8044SWilliam.Kucharski@Sun.COM #define EI_CLASS	4	/* File class byte index */
126*8044SWilliam.Kucharski@Sun.COM #define ELFCLASSNONE	0	/* Invalid class */
127*8044SWilliam.Kucharski@Sun.COM #define ELFCLASS32	1	/* 32-bit objects */
128*8044SWilliam.Kucharski@Sun.COM #define ELFCLASS64	2	/* 64-bit objects */
129*8044SWilliam.Kucharski@Sun.COM 
130*8044SWilliam.Kucharski@Sun.COM #define EI_DATA		5	/* Data encodeing byte index */
131*8044SWilliam.Kucharski@Sun.COM #define ELFDATANONE	0	/* Invalid data encoding */
132*8044SWilliam.Kucharski@Sun.COM #define ELFDATA2LSB	1	/* 2's complement little endian */
133*8044SWilliam.Kucharski@Sun.COM #define ELFDATA2MSB	2	/* 2's complement big endian */
134*8044SWilliam.Kucharski@Sun.COM 
135*8044SWilliam.Kucharski@Sun.COM #define EI_VERSION	6	/* File version byte index */
136*8044SWilliam.Kucharski@Sun.COM 				/* Value must be EV_CURRENT */
137*8044SWilliam.Kucharski@Sun.COM 
138*8044SWilliam.Kucharski@Sun.COM #define EV_NONE		0	/* Invalid ELF Version */
139*8044SWilliam.Kucharski@Sun.COM #define EV_CURRENT	1	/* Current version */
140*8044SWilliam.Kucharski@Sun.COM 
141*8044SWilliam.Kucharski@Sun.COM #define ELF32_PHDR_SIZE (8*4)	/* Size of an elf program header */
142*8044SWilliam.Kucharski@Sun.COM 
143*8044SWilliam.Kucharski@Sun.COM #ifndef ASSEMBLY
144*8044SWilliam.Kucharski@Sun.COM /*
145*8044SWilliam.Kucharski@Sun.COM  * ELF definitions common to all 32-bit architectures.
146*8044SWilliam.Kucharski@Sun.COM  */
147*8044SWilliam.Kucharski@Sun.COM 
148*8044SWilliam.Kucharski@Sun.COM typedef uint32_t	Elf32_Addr;
149*8044SWilliam.Kucharski@Sun.COM typedef uint16_t	Elf32_Half;
150*8044SWilliam.Kucharski@Sun.COM typedef uint32_t	Elf32_Off;
151*8044SWilliam.Kucharski@Sun.COM typedef int32_t		Elf32_Sword;
152*8044SWilliam.Kucharski@Sun.COM typedef uint32_t	Elf32_Word;
153*8044SWilliam.Kucharski@Sun.COM typedef uint32_t	Elf32_Size;
154*8044SWilliam.Kucharski@Sun.COM 
155*8044SWilliam.Kucharski@Sun.COM typedef uint64_t	Elf64_Addr;
156*8044SWilliam.Kucharski@Sun.COM typedef uint16_t	Elf64_Half;
157*8044SWilliam.Kucharski@Sun.COM typedef uint64_t	Elf64_Off;
158*8044SWilliam.Kucharski@Sun.COM typedef int32_t		Elf64_Sword;
159*8044SWilliam.Kucharski@Sun.COM typedef uint32_t	Elf64_Word;
160*8044SWilliam.Kucharski@Sun.COM typedef uint64_t	Elf64_Size;
161*8044SWilliam.Kucharski@Sun.COM 
162*8044SWilliam.Kucharski@Sun.COM /*
163*8044SWilliam.Kucharski@Sun.COM  * ELF header.
164*8044SWilliam.Kucharski@Sun.COM  */
165*8044SWilliam.Kucharski@Sun.COM typedef struct {
166*8044SWilliam.Kucharski@Sun.COM 	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
167*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_type;		/* File type. */
168*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_machine;	/* Machine architecture. */
169*8044SWilliam.Kucharski@Sun.COM 	Elf32_Word	e_version;	/* ELF format version. */
170*8044SWilliam.Kucharski@Sun.COM 	Elf32_Addr	e_entry;	/* Entry point. */
171*8044SWilliam.Kucharski@Sun.COM 	Elf32_Off	e_phoff;	/* Program header file offset. */
172*8044SWilliam.Kucharski@Sun.COM 	Elf32_Off	e_shoff;	/* Section header file offset. */
173*8044SWilliam.Kucharski@Sun.COM 	Elf32_Word	e_flags;	/* Architecture-specific flags. */
174*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */
175*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_phentsize;	/* Size of program header entry. */
176*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_phnum;	/* Number of program header entries. */
177*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_shentsize;	/* Size of section header entry. */
178*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_shnum;	/* Number of section header entries. */
179*8044SWilliam.Kucharski@Sun.COM 	Elf32_Half	e_shstrndx;	/* Section name strings section. */
180*8044SWilliam.Kucharski@Sun.COM } Elf32_Ehdr;
181*8044SWilliam.Kucharski@Sun.COM 
182*8044SWilliam.Kucharski@Sun.COM typedef struct {
183*8044SWilliam.Kucharski@Sun.COM 	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
184*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_type;		/* File type. */
185*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_machine;	/* Machine architecture. */
186*8044SWilliam.Kucharski@Sun.COM 	Elf64_Word	e_version;	/* ELF format version. */
187*8044SWilliam.Kucharski@Sun.COM 	Elf64_Addr	e_entry;	/* Entry point. */
188*8044SWilliam.Kucharski@Sun.COM 	Elf64_Off	e_phoff;	/* Program header file offset. */
189*8044SWilliam.Kucharski@Sun.COM 	Elf64_Off	e_shoff;	/* Section header file offset. */
190*8044SWilliam.Kucharski@Sun.COM 	Elf64_Word	e_flags;	/* Architecture-specific flags. */
191*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */
192*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_phentsize;	/* Size of program header entry. */
193*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_phnum;	/* Number of program header entries. */
194*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_shentsize;	/* Size of section header entry. */
195*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_shnum;	/* Number of section header entries. */
196*8044SWilliam.Kucharski@Sun.COM 	Elf64_Half	e_shstrndx;	/* Section name strings section. */
197*8044SWilliam.Kucharski@Sun.COM } Elf64_Ehdr;
198*8044SWilliam.Kucharski@Sun.COM 
199*8044SWilliam.Kucharski@Sun.COM /*
200*8044SWilliam.Kucharski@Sun.COM  * Program header.
201*8044SWilliam.Kucharski@Sun.COM  */
202*8044SWilliam.Kucharski@Sun.COM typedef struct {
203*8044SWilliam.Kucharski@Sun.COM 	Elf32_Word	p_type;		/* Entry type. */
204*8044SWilliam.Kucharski@Sun.COM 	Elf32_Off	p_offset;	/* File offset of contents. */
205*8044SWilliam.Kucharski@Sun.COM 	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */
206*8044SWilliam.Kucharski@Sun.COM 	Elf32_Addr	p_paddr;	/* Physical address. */
207*8044SWilliam.Kucharski@Sun.COM 	Elf32_Size	p_filesz;	/* Size of contents in file. */
208*8044SWilliam.Kucharski@Sun.COM 	Elf32_Size	p_memsz;	/* Size of contents in memory. */
209*8044SWilliam.Kucharski@Sun.COM 	Elf32_Word	p_flags;	/* Access permission flags. */
210*8044SWilliam.Kucharski@Sun.COM 	Elf32_Size	p_align;	/* Alignment in memory and file. */
211*8044SWilliam.Kucharski@Sun.COM } Elf32_Phdr;
212*8044SWilliam.Kucharski@Sun.COM 
213*8044SWilliam.Kucharski@Sun.COM typedef struct {
214*8044SWilliam.Kucharski@Sun.COM 	Elf64_Word	p_type;		/* Entry type. */
215*8044SWilliam.Kucharski@Sun.COM 	Elf64_Word	p_flags;	/* Access permission flags. */
216*8044SWilliam.Kucharski@Sun.COM 	Elf64_Off	p_offset;	/* File offset of contents. */
217*8044SWilliam.Kucharski@Sun.COM 	Elf64_Addr	p_vaddr;	/* Virtual address (not used). */
218*8044SWilliam.Kucharski@Sun.COM 	Elf64_Addr	p_paddr;	/* Physical address. */
219*8044SWilliam.Kucharski@Sun.COM 	Elf64_Size	p_filesz;	/* Size of contents in file. */
220*8044SWilliam.Kucharski@Sun.COM 	Elf64_Size	p_memsz;	/* Size of contents in memory. */
221*8044SWilliam.Kucharski@Sun.COM 	Elf64_Size	p_align;	/* Alignment in memory and file. */
222*8044SWilliam.Kucharski@Sun.COM } Elf64_Phdr;
223*8044SWilliam.Kucharski@Sun.COM 
224*8044SWilliam.Kucharski@Sun.COM /* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
225*8044SWilliam.Kucharski@Sun.COM 
226*8044SWilliam.Kucharski@Sun.COM 
227*8044SWilliam.Kucharski@Sun.COM /* ELF Defines for the current architecture */
228*8044SWilliam.Kucharski@Sun.COM #include "i386_elf.h"
229*8044SWilliam.Kucharski@Sun.COM 
230*8044SWilliam.Kucharski@Sun.COM #endif /* ASSEMBLY */
231*8044SWilliam.Kucharski@Sun.COM 
232*8044SWilliam.Kucharski@Sun.COM //#include "elf_boot.h"
233*8044SWilliam.Kucharski@Sun.COM 
234*8044SWilliam.Kucharski@Sun.COM #endif /* ELF_H */
235