176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ELF_H
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF_H
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanFILE_LICENCE ( GPL2_OR_LATER );
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_NIDENT	16	/* Size of e_ident array. */
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Values for e_type. */
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_NONE		0	/* No file type */
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_REL		1	/* Relocatable file */
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_EXEC		2	/* Executable file */
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_DYN		3	/* Shared object file */
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ET_CORE		4	/* Core file */
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Values for e_machine (architecute). */
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_NONE		 0		/* No machine */
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_M32		 1		/* AT&T WE 32100 */
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARC	 2		/* SUN SPARC */
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_386		 3		/* Intel 80386+ */
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68K		 4		/* Motorola m68k family */
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_88K		 5		/* Motorola m88k family */
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_486		 6		/* Perhaps disused */
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_860		 7		/* Intel 80860 */
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MIPS		 8		/* MIPS R3000 big-endian */
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_S370		 9		/* IBM System/370 */
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MIPS_RS3_LE	10		/* MIPS R3000 little-endian */
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PARISC	15		/* HPPA */
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_VPP500	17		/* Fujitsu VPP500 */
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARC32PLUS	18		/* Sun's "v8plus" */
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_960		19		/* Intel 80960 */
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PPC		20		/* PowerPC */
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PPC64	21		/* PowerPC 64-bit */
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_S390		22		/* IBM S390 */
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_V800		36		/* NEC V800 series */
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_FR20		37		/* Fujitsu FR20 */
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_RH32		38		/* TRW RH-32 */
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_RCE		39		/* Motorola RCE */
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ARM		40		/* ARM */
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_FAKE_ALPHA	41		/* Digital Alpha */
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SH		42		/* Hitachi SH */
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SPARCV9	43		/* SPARC v9 64-bit */
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_TRICORE	44		/* Siemens Tricore */
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ARC		45		/* Argonaut RISC Core */
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8_300	46		/* Hitachi H8/300 */
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8_300H	47		/* Hitachi H8/300H */
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8S		48		/* Hitachi H8S */
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_H8_500	49		/* Hitachi H8/500 */
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_IA_64	50		/* Intel Merced */
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MIPS_X	51		/* Stanford MIPS-X */
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_COLDFIRE	52		/* Motorola Coldfire */
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68HC12	53		/* Motorola M68HC12 */
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MMA		54		/* Fujitsu MMA Multimedia Accelerator*/
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PCP		55		/* Siemens PCP */
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_NCPU		56		/* Sony nCPU embeeded RISC */
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_NDR1		57		/* Denso NDR1 microprocessor */
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_STARCORE	58		/* Motorola Start*Core processor */
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ME16		59		/* Toyota ME16 processor */
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ST100	60		/* STMicroelectronic ST100 processor */
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_TINYJ	61		/* Advanced Logic Corp. Tinyj emb.fam*/
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_X86_64	62		/* AMD x86-64 architecture */
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PDSP		63		/* Sony DSP Processor */
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_FX66		66		/* Siemens FX66 microcontroller */
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ST9PLUS	67		/* STMicroelectronics ST9+ 8/16 mc */
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ST7		68		/* STmicroelectronics ST7 8 bit mc */
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68HC16	69		/* Motorola MC68HC16 microcontroller */
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68HC11	70		/* Motorola MC68HC11 microcontroller */
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68HC08	71		/* Motorola MC68HC08 microcontroller */
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_68HC05	72		/* Motorola MC68HC05 microcontroller */
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_SVX		73		/* Silicon Graphics SVx */
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_AT19		74		/* STMicroelectronics ST19 8 bit mc */
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_VAX		75		/* Digital VAX */
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_CRIS		76		/* Axis Communications 32-bit embedded processor */
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_JAVELIN	77		/* Infineon Technologies 32-bit embedded processor */
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MMIX		80		/* Donald Knuth's educational 64-bit processor */
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_HUANY	81		/* Harvard University machine-independent object files */
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PRISM	82		/* SiTera Prism */
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_AVR		83		/* Atmel AVR 8-bit microcontroller */
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_FR30		84		/* Fujitsu FR30 */
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_D10V		85		/* Mitsubishi D10V */
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_D30V		86		/* Mitsubishi D30V */
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_V850		87		/* NEC v850 */
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_M32R		88		/* Mitsubishi M32R */
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MN10300	89		/* Matsushita MN10300 */
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_MN10200	90		/* Matsushita MN10200 */
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_PJ		91		/* picoJava */
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EM_NUM		95
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Values for p_type. */
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_NULL		0	/* Unused entry. */
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_LOAD		1	/* Loadable segment. */
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_DYNAMIC	2	/* Dynamic linking information segment. */
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_INTERP	3	/* Pathname of interpreter. */
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_NOTE		4	/* Auxiliary information. */
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_SHLIB	5	/* Reserved (not used). */
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PT_PHDR		6	/* Location of program header itself. */
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Values for p_flags. */
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_X		0x1	/* Executable. */
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_W		0x2	/* Writable. */
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define PF_R		0x4	/* Readable. */
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	ELF_PROGRAM_RETURNS_BIT	0x8000000	/* e_flags bit 31 */
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG0		0
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG0		0x7f
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG1		1
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG1		'E'
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG2		2
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG2		'L'
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_MAG3		3
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG3		'F'
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFMAG		"\177ELF"
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define	SELFMAG		4
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_CLASS	4	/* File class byte index */
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASSNONE	0	/* Invalid class */
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASS32	1	/* 32-bit objects */
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFCLASS64	2	/* 64-bit objects */
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_DATA		5	/* Data encodeing byte index */
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATANONE	0	/* Invalid data encoding */
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATA2LSB	1	/* 2's complement little endian */
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELFDATA2MSB	2	/* 2's complement big endian */
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EI_VERSION	6	/* File version byte index */
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman				/* Value must be EV_CURRENT */
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EV_NONE		0	/* Invalid ELF Version */
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EV_CURRENT	1	/* Current version */
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define ELF32_PHDR_SIZE (8*4)	/* Size of an elf program header */
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef ASSEMBLY
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <stdint.h>
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ELF definitions common to all 32-bit architectures.
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t	Elf32_Addr;
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint16_t	Elf32_Half;
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t	Elf32_Off;
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef int32_t		Elf32_Sword;
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t	Elf32_Word;
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t	Elf32_Size;
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint64_t	Elf64_Addr;
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint16_t	Elf64_Half;
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint64_t	Elf64_Off;
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef int32_t		Elf64_Sword;
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint32_t	Elf64_Word;
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef uint64_t	Elf64_Size;
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * ELF header.
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_type;		/* File type. */
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_machine;	/* Machine architecture. */
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Word	e_version;	/* ELF format version. */
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Addr	e_entry;	/* Entry point. */
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Off	e_phoff;	/* Program header file offset. */
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Off	e_shoff;	/* Section header file offset. */
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Word	e_flags;	/* Architecture-specific flags. */
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_phentsize;	/* Size of program header entry. */
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_phnum;	/* Number of program header entries. */
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_shentsize;	/* Size of section header entry. */
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_shnum;	/* Number of section header entries. */
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Half	e_shstrndx;	/* Section name strings section. */
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Ehdr;
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	unsigned char	e_ident[EI_NIDENT];	/* File identification. */
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_type;		/* File type. */
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_machine;	/* Machine architecture. */
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Word	e_version;	/* ELF format version. */
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Addr	e_entry;	/* Entry point. */
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Off	e_phoff;	/* Program header file offset. */
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Off	e_shoff;	/* Section header file offset. */
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Word	e_flags;	/* Architecture-specific flags. */
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_phentsize;	/* Size of program header entry. */
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_phnum;	/* Number of program header entries. */
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_shentsize;	/* Size of section header entry. */
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_shnum;	/* Number of section header entries. */
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Half	e_shstrndx;	/* Section name strings section. */
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf64_Ehdr;
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/*
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman * Program header.
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman */
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Word	p_type;		/* Entry type. */
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Off	p_offset;	/* File offset of contents. */
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Addr	p_vaddr;	/* Virtual address (not used). */
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Addr	p_paddr;	/* Physical address. */
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Size	p_filesz;	/* Size of contents in file. */
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Size	p_memsz;	/* Size of contents in memory. */
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Word	p_flags;	/* Access permission flags. */
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf32_Size	p_align;	/* Alignment in memory and file. */
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf32_Phdr;
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Word	p_type;		/* Entry type. */
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Word	p_flags;	/* Access permission flags. */
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Off	p_offset;	/* File offset of contents. */
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Addr	p_vaddr;	/* Virtual address (not used). */
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Addr	p_paddr;	/* Physical address. */
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Size	p_filesz;	/* Size of contents in file. */
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Size	p_memsz;	/* Size of contents in memory. */
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman	Elf64_Size	p_align;	/* Alignment in memory and file. */
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} Elf64_Phdr;
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* ASSEMBLY */
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif /* ELF_H */
235