These changes are the raw update to qemu-2.6.
[kvmfornfv.git] / qemu / roms / ipxe / src / include / elf.h
index 04022b6..18f755a 100644 (file)
 #ifndef ELF_H
 #define ELF_H
 
-FILE_LICENCE ( GPL2_OR_LATER );
-
-#define EI_NIDENT      16      /* Size of e_ident array. */
-
-/* Values for e_type. */
-#define ET_NONE                0       /* No file type */
-#define ET_REL         1       /* Relocatable file */
-#define ET_EXEC                2       /* Executable file */
-#define ET_DYN         3       /* Shared object file */
-#define ET_CORE                4       /* Core file */
-
-/* Values for e_machine (architecute). */
-#define EM_NONE                 0              /* No machine */
-#define EM_M32          1              /* AT&T WE 32100 */
-#define EM_SPARC        2              /* SUN SPARC */
-#define EM_386          3              /* Intel 80386+ */
-#define EM_68K          4              /* Motorola m68k family */
-#define EM_88K          5              /* Motorola m88k family */
-#define EM_486          6              /* Perhaps disused */
-#define EM_860          7              /* Intel 80860 */
-#define EM_MIPS                 8              /* MIPS R3000 big-endian */
-#define EM_S370                 9              /* IBM System/370 */
-#define EM_MIPS_RS3_LE 10              /* MIPS R3000 little-endian */
-
-#define EM_PARISC      15              /* HPPA */
-#define EM_VPP500      17              /* Fujitsu VPP500 */
-#define EM_SPARC32PLUS 18              /* Sun's "v8plus" */
-#define EM_960         19              /* Intel 80960 */
-#define EM_PPC         20              /* PowerPC */
-#define EM_PPC64       21              /* PowerPC 64-bit */
-#define EM_S390                22              /* IBM S390 */
-
-#define EM_V800                36              /* NEC V800 series */
-#define EM_FR20                37              /* Fujitsu FR20 */
-#define EM_RH32                38              /* TRW RH-32 */
-#define EM_RCE         39              /* Motorola RCE */
-#define EM_ARM         40              /* ARM */
-#define EM_FAKE_ALPHA  41              /* Digital Alpha */
-#define EM_SH          42              /* Hitachi SH */
-#define EM_SPARCV9     43              /* SPARC v9 64-bit */
-#define EM_TRICORE     44              /* Siemens Tricore */
-#define EM_ARC         45              /* Argonaut RISC Core */
-#define EM_H8_300      46              /* Hitachi H8/300 */
-#define EM_H8_300H     47              /* Hitachi H8/300H */
-#define EM_H8S         48              /* Hitachi H8S */
-#define EM_H8_500      49              /* Hitachi H8/500 */
-#define EM_IA_64       50              /* Intel Merced */
-#define EM_MIPS_X      51              /* Stanford MIPS-X */
-#define EM_COLDFIRE    52              /* Motorola Coldfire */
-#define EM_68HC12      53              /* Motorola M68HC12 */
-#define EM_MMA         54              /* Fujitsu MMA Multimedia Accelerator*/
-#define EM_PCP         55              /* Siemens PCP */
-#define EM_NCPU                56              /* Sony nCPU embeeded RISC */
-#define EM_NDR1                57              /* Denso NDR1 microprocessor */
-#define EM_STARCORE    58              /* Motorola Start*Core processor */
-#define EM_ME16                59              /* Toyota ME16 processor */
-#define EM_ST100       60              /* STMicroelectronic ST100 processor */
-#define EM_TINYJ       61              /* Advanced Logic Corp. Tinyj emb.fam*/
-#define EM_X86_64      62              /* AMD x86-64 architecture */
-#define EM_PDSP                63              /* Sony DSP Processor */
-
-#define EM_FX66                66              /* Siemens FX66 microcontroller */
-#define EM_ST9PLUS     67              /* STMicroelectronics ST9+ 8/16 mc */
-#define EM_ST7         68              /* STmicroelectronics ST7 8 bit mc */
-#define EM_68HC16      69              /* Motorola MC68HC16 microcontroller */
-#define EM_68HC11      70              /* Motorola MC68HC11 microcontroller */
-#define EM_68HC08      71              /* Motorola MC68HC08 microcontroller */
-#define EM_68HC05      72              /* Motorola MC68HC05 microcontroller */
-#define EM_SVX         73              /* Silicon Graphics SVx */
-#define EM_AT19                74              /* STMicroelectronics ST19 8 bit mc */
-#define EM_VAX         75              /* Digital VAX */
-#define EM_CRIS                76              /* Axis Communications 32-bit embedded processor */
-#define EM_JAVELIN     77              /* Infineon Technologies 32-bit embedded processor */
-#define EM_FIREPATH    78              /* Element 14 64-bit DSP Processor */
-#define EM_ZSP         79              /* LSI Logic 16-bit DSP Processor */
-#define EM_MMIX                80              /* Donald Knuth's educational 64-bit processor */
-#define EM_HUANY       81              /* Harvard University machine-independent object files */
-#define EM_PRISM       82              /* SiTera Prism */
-#define EM_AVR         83              /* Atmel AVR 8-bit microcontroller */
-#define EM_FR30                84              /* Fujitsu FR30 */
-#define EM_D10V                85              /* Mitsubishi D10V */
-#define EM_D30V                86              /* Mitsubishi D30V */
-#define EM_V850                87              /* NEC v850 */
-#define EM_M32R                88              /* Mitsubishi M32R */
-#define EM_MN10300     89              /* Matsushita MN10300 */
-#define EM_MN10200     90              /* Matsushita MN10200 */
-#define EM_PJ          91              /* picoJava */
-#define EM_OPENRISC    92              /* OpenRISC 32-bit embedded processor */
-#define EM_ARC_A5      93              /* ARC Cores Tangent-A5 */
-#define EM_XTENSA      94              /* Tensilica Xtensa Architecture */
-#define EM_NUM         95
-
-/* Values for p_type. */
-#define PT_NULL                0       /* Unused entry. */
-#define PT_LOAD                1       /* Loadable segment. */
-#define PT_DYNAMIC     2       /* Dynamic linking information segment. */
-#define PT_INTERP      3       /* Pathname of interpreter. */
-#define PT_NOTE                4       /* Auxiliary information. */
-#define PT_SHLIB       5       /* Reserved (not used). */
-#define PT_PHDR                6       /* Location of program header itself. */
-
-/* Values for p_flags. */
-#define PF_X           0x1     /* Executable. */
-#define PF_W           0x2     /* Writable. */
-#define PF_R           0x4     /* Readable. */
-
-
-#define        ELF_PROGRAM_RETURNS_BIT 0x8000000       /* e_flags bit 31 */
-
-#define EI_MAG0                0
-#define ELFMAG0                0x7f
-
-#define EI_MAG1                1
-#define ELFMAG1                'E'
-
-#define EI_MAG2                2
-#define ELFMAG2                'L'
-
-#define EI_MAG3                3
-#define ELFMAG3                'F'
-
-#define ELFMAG         "\177ELF"
-#define        SELFMAG         4
-
-#define EI_CLASS       4       /* File class byte index */
-#define ELFCLASSNONE   0       /* Invalid class */
-#define ELFCLASS32     1       /* 32-bit objects */
-#define ELFCLASS64     2       /* 64-bit objects */
+/**
+ * @file
+ *
+ * ELF headers
+ *
+ */
 
-#define EI_DATA                5       /* Data encodeing byte index */
-#define ELFDATANONE    0       /* Invalid data encoding */
-#define ELFDATA2LSB    1       /* 2's complement little endian */
-#define ELFDATA2MSB    2       /* 2's complement big endian */
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
-#define EI_VERSION     6       /* File version byte index */
-                               /* Value must be EV_CURRENT */
+#include <stdint.h>
 
-#define EV_NONE                0       /* Invalid ELF Version */
-#define EV_CURRENT     1       /* Current version */
+typedef uint32_t Elf32_Addr;
+typedef uint16_t Elf32_Half;
+typedef uint32_t Elf32_Off;
+typedef int32_t Elf32_Sword;
+typedef uint32_t Elf32_Word;
 
-#define ELF32_PHDR_SIZE (8*4)  /* Size of an elf program header */
+/** Length of ELF identifier */
+#define EI_NIDENT 16
 
-#ifndef ASSEMBLY
+/** ELF header */
+typedef struct {
+       unsigned char e_ident[EI_NIDENT];
+       Elf32_Half e_type;
+       Elf32_Half e_machine;
+       Elf32_Word e_version;
+       Elf32_Addr e_entry;
+       Elf32_Off e_phoff;
+       Elf32_Off e_shoff;
+       Elf32_Word e_flags;
+       Elf32_Half e_ehsize;
+       Elf32_Half e_phentsize;
+       Elf32_Half e_phnum;
+       Elf32_Half e_shentsize;
+       Elf32_Half e_shnum;
+       Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
 
-#include <stdint.h>
+/* ELF identifier indexes */
+#define EI_MAG0 0
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
 
-/*
- * ELF definitions common to all 32-bit architectures.
- */
+/* ELF magic signature bytes */
+#define ELFMAG0 0x7f
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
 
-typedef uint32_t       Elf32_Addr;
-typedef uint16_t       Elf32_Half;
-typedef uint32_t       Elf32_Off;
-typedef int32_t                Elf32_Sword;
-typedef uint32_t       Elf32_Word;
-typedef uint32_t       Elf32_Size;
+/* ELF classes */
+#define ELFCLASS32 1
 
-typedef uint64_t       Elf64_Addr;
-typedef uint16_t       Elf64_Half;
-typedef uint64_t       Elf64_Off;
-typedef int32_t                Elf64_Sword;
-typedef uint32_t       Elf64_Word;
-typedef uint64_t       Elf64_Size;
+/* ELF data encodings */
+#define ELFDATA2LSB 1
 
-/*
- * ELF header.
- */
-typedef struct {
-       unsigned char   e_ident[EI_NIDENT];     /* File identification. */
-       Elf32_Half      e_type;         /* File type. */
-       Elf32_Half      e_machine;      /* Machine architecture. */
-       Elf32_Word      e_version;      /* ELF format version. */
-       Elf32_Addr      e_entry;        /* Entry point. */
-       Elf32_Off       e_phoff;        /* Program header file offset. */
-       Elf32_Off       e_shoff;        /* Section header file offset. */
-       Elf32_Word      e_flags;        /* Architecture-specific flags. */
-       Elf32_Half      e_ehsize;       /* Size of ELF header in bytes. */
-       Elf32_Half      e_phentsize;    /* Size of program header entry. */
-       Elf32_Half      e_phnum;        /* Number of program header entries. */
-       Elf32_Half      e_shentsize;    /* Size of section header entry. */
-       Elf32_Half      e_shnum;        /* Number of section header entries. */
-       Elf32_Half      e_shstrndx;     /* Section name strings section. */
-} Elf32_Ehdr;
-
-typedef struct {
-       unsigned char   e_ident[EI_NIDENT];     /* File identification. */
-       Elf64_Half      e_type;         /* File type. */
-       Elf64_Half      e_machine;      /* Machine architecture. */
-       Elf64_Word      e_version;      /* ELF format version. */
-       Elf64_Addr      e_entry;        /* Entry point. */
-       Elf64_Off       e_phoff;        /* Program header file offset. */
-       Elf64_Off       e_shoff;        /* Section header file offset. */
-       Elf64_Word      e_flags;        /* Architecture-specific flags. */
-       Elf64_Half      e_ehsize;       /* Size of ELF header in bytes. */
-       Elf64_Half      e_phentsize;    /* Size of program header entry. */
-       Elf64_Half      e_phnum;        /* Number of program header entries. */
-       Elf64_Half      e_shentsize;    /* Size of section header entry. */
-       Elf64_Half      e_shnum;        /* Number of section header entries. */
-       Elf64_Half      e_shstrndx;     /* Section name strings section. */
-} Elf64_Ehdr;
+/* ELF versions */
+#define EV_CURRENT 1
 
-/*
- * Program header.
- */
+/** ELF program header */
 typedef struct {
-       Elf32_Word      p_type;         /* Entry type. */
-       Elf32_Off       p_offset;       /* File offset of contents. */
-       Elf32_Addr      p_vaddr;        /* Virtual address (not used). */
-       Elf32_Addr      p_paddr;        /* Physical address. */
-       Elf32_Size      p_filesz;       /* Size of contents in file. */
-       Elf32_Size      p_memsz;        /* Size of contents in memory. */
-       Elf32_Word      p_flags;        /* Access permission flags. */
-       Elf32_Size      p_align;        /* Alignment in memory and file. */
+       Elf32_Word p_type;
+       Elf32_Off p_offset;
+       Elf32_Addr p_vaddr;
+       Elf32_Addr p_paddr;
+       Elf32_Word p_filesz;
+       Elf32_Word p_memsz;
+       Elf32_Word p_flags;
+       Elf32_Word p_align;
 } Elf32_Phdr;
 
-typedef struct {
-       Elf64_Word      p_type;         /* Entry type. */
-       Elf64_Word      p_flags;        /* Access permission flags. */
-       Elf64_Off       p_offset;       /* File offset of contents. */
-       Elf64_Addr      p_vaddr;        /* Virtual address (not used). */
-       Elf64_Addr      p_paddr;        /* Physical address. */
-       Elf64_Size      p_filesz;       /* Size of contents in file. */
-       Elf64_Size      p_memsz;        /* Size of contents in memory. */
-       Elf64_Size      p_align;        /* Alignment in memory and file. */
-} Elf64_Phdr;
-
-/* Standardized Elf image notes for booting... The name for all of these is ELFBoot */
-
-#endif /* ASSEMBLY */
+/* ELF segment types */
+#define PT_LOAD 1
 
 #endif /* ELF_H */