linux/arch/powerpc/boot/elf.h
<<
>>
Prefs
   1#ifndef _PPC_BOOT_ELF_H_
   2#define _PPC_BOOT_ELF_H_
   3
   4/* 32-bit ELF base types. */
   5typedef unsigned int Elf32_Addr;
   6typedef unsigned short Elf32_Half;
   7typedef unsigned int Elf32_Off;
   8typedef signed int Elf32_Sword;
   9typedef unsigned int Elf32_Word;
  10
  11/* 64-bit ELF base types. */
  12typedef unsigned long long Elf64_Addr;
  13typedef unsigned short Elf64_Half;
  14typedef signed short Elf64_SHalf;
  15typedef unsigned long long Elf64_Off;
  16typedef signed int Elf64_Sword;
  17typedef unsigned int Elf64_Word;
  18typedef unsigned long long Elf64_Xword;
  19typedef signed long long Elf64_Sxword;
  20
  21/* These constants are for the segment types stored in the image headers */
  22#define PT_NULL    0
  23#define PT_LOAD    1
  24#define PT_DYNAMIC 2
  25#define PT_INTERP  3
  26#define PT_NOTE    4
  27#define PT_SHLIB   5
  28#define PT_PHDR    6
  29#define PT_TLS     7            /* Thread local storage segment */
  30#define PT_LOOS    0x60000000   /* OS-specific */
  31#define PT_HIOS    0x6fffffff   /* OS-specific */
  32#define PT_LOPROC  0x70000000
  33#define PT_HIPROC  0x7fffffff
  34#define PT_GNU_EH_FRAME         0x6474e550
  35
  36#define PT_GNU_STACK    (PT_LOOS + 0x474e551)
  37
  38/* These constants define the different elf file types */
  39#define ET_NONE   0
  40#define ET_REL    1
  41#define ET_EXEC   2
  42#define ET_DYN    3
  43#define ET_CORE   4
  44#define ET_LOPROC 0xff00
  45#define ET_HIPROC 0xffff
  46
  47/* These constants define the various ELF target machines */
  48#define EM_NONE  0
  49#define EM_PPC         20       /* PowerPC */
  50#define EM_PPC64       21       /* PowerPC64 */
  51
  52#define EI_NIDENT       16
  53
  54typedef struct elf32_hdr {
  55        unsigned char e_ident[EI_NIDENT];
  56        Elf32_Half e_type;
  57        Elf32_Half e_machine;
  58        Elf32_Word e_version;
  59        Elf32_Addr e_entry;     /* Entry point */
  60        Elf32_Off e_phoff;
  61        Elf32_Off e_shoff;
  62        Elf32_Word e_flags;
  63        Elf32_Half e_ehsize;
  64        Elf32_Half e_phentsize;
  65        Elf32_Half e_phnum;
  66        Elf32_Half e_shentsize;
  67        Elf32_Half e_shnum;
  68        Elf32_Half e_shstrndx;
  69} Elf32_Ehdr;
  70
  71typedef struct elf64_hdr {
  72        unsigned char e_ident[16];      /* ELF "magic number" */
  73        Elf64_Half e_type;
  74        Elf64_Half e_machine;
  75        Elf64_Word e_version;
  76        Elf64_Addr e_entry;     /* Entry point virtual address */
  77        Elf64_Off e_phoff;      /* Program header table file offset */
  78        Elf64_Off e_shoff;      /* Section header table file offset */
  79        Elf64_Word e_flags;
  80        Elf64_Half e_ehsize;
  81        Elf64_Half e_phentsize;
  82        Elf64_Half e_phnum;
  83        Elf64_Half e_shentsize;
  84        Elf64_Half e_shnum;
  85        Elf64_Half e_shstrndx;
  86} Elf64_Ehdr;
  87
  88/* These constants define the permissions on sections in the program
  89   header, p_flags. */
  90#define PF_R            0x4
  91#define PF_W            0x2
  92#define PF_X            0x1
  93
  94typedef struct elf32_phdr {
  95        Elf32_Word p_type;
  96        Elf32_Off p_offset;
  97        Elf32_Addr p_vaddr;
  98        Elf32_Addr p_paddr;
  99        Elf32_Word p_filesz;
 100        Elf32_Word p_memsz;
 101        Elf32_Word p_flags;
 102        Elf32_Word p_align;
 103} Elf32_Phdr;
 104
 105typedef struct elf64_phdr {
 106        Elf64_Word p_type;
 107        Elf64_Word p_flags;
 108        Elf64_Off p_offset;     /* Segment file offset */
 109        Elf64_Addr p_vaddr;     /* Segment virtual address */
 110        Elf64_Addr p_paddr;     /* Segment physical address */
 111        Elf64_Xword p_filesz;   /* Segment size in file */
 112        Elf64_Xword p_memsz;    /* Segment size in memory */
 113        Elf64_Xword p_align;    /* Segment alignment, file & memory */
 114} Elf64_Phdr;
 115
 116#define EI_MAG0         0       /* e_ident[] indexes */
 117#define EI_MAG1         1
 118#define EI_MAG2         2
 119#define EI_MAG3         3
 120#define EI_CLASS        4
 121#define EI_DATA         5
 122#define EI_VERSION      6
 123#define EI_OSABI        7
 124#define EI_PAD          8
 125
 126#define ELFMAG0         0x7f    /* EI_MAG */
 127#define ELFMAG1         'E'
 128#define ELFMAG2         'L'
 129#define ELFMAG3         'F'
 130#define ELFMAG          "\177ELF"
 131#define SELFMAG         4
 132
 133#define ELFCLASSNONE    0       /* EI_CLASS */
 134#define ELFCLASS32      1
 135#define ELFCLASS64      2
 136#define ELFCLASSNUM     3
 137
 138#define ELFDATANONE     0       /* e_ident[EI_DATA] */
 139#define ELFDATA2LSB     1
 140#define ELFDATA2MSB     2
 141
 142#define EV_NONE         0       /* e_version, EI_VERSION */
 143#define EV_CURRENT      1
 144#define EV_NUM          2
 145
 146#define ELFOSABI_NONE   0
 147#define ELFOSABI_LINUX  3
 148
 149struct elf_info {
 150        unsigned long loadsize;
 151        unsigned long memsize;
 152        unsigned long elfoffset;
 153};
 154int parse_elf64(void *hdr, struct elf_info *info);
 155int parse_elf32(void *hdr, struct elf_info *info);
 156
 157#endif                          /* _PPC_BOOT_ELF_H_ */
 158