123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef _PPC_BOOT_ELF_H_
- #define _PPC_BOOT_ELF_H_
- /* 32-bit ELF base types. */
- typedef unsigned int Elf32_Addr;
- typedef unsigned short Elf32_Half;
- typedef unsigned int Elf32_Off;
- typedef signed int Elf32_Sword;
- typedef unsigned int Elf32_Word;
- /* 64-bit ELF base types. */
- typedef unsigned long long Elf64_Addr;
- typedef unsigned short Elf64_Half;
- typedef signed short Elf64_SHalf;
- typedef unsigned long long Elf64_Off;
- typedef signed int Elf64_Sword;
- typedef unsigned int Elf64_Word;
- typedef unsigned long long Elf64_Xword;
- typedef signed long long Elf64_Sxword;
- /* These constants are for the segment types stored in the image headers */
- #define PT_NULL 0
- #define PT_LOAD 1
- #define PT_DYNAMIC 2
- #define PT_INTERP 3
- #define PT_NOTE 4
- #define PT_SHLIB 5
- #define PT_PHDR 6
- #define PT_TLS 7 /* Thread local storage segment */
- #define PT_LOOS 0x60000000 /* OS-specific */
- #define PT_HIOS 0x6fffffff /* OS-specific */
- #define PT_LOPROC 0x70000000
- #define PT_HIPROC 0x7fffffff
- #define PT_GNU_EH_FRAME 0x6474e550
- #define PT_GNU_STACK (PT_LOOS + 0x474e551)
- /* These constants define the different elf file types */
- #define ET_NONE 0
- #define ET_REL 1
- #define ET_EXEC 2
- #define ET_DYN 3
- #define ET_CORE 4
- #define ET_LOPROC 0xff00
- #define ET_HIPROC 0xffff
- /* These constants define the various ELF target machines */
- #define EM_NONE 0
- #define EM_PPC 20 /* PowerPC */
- #define EM_PPC64 21 /* PowerPC64 */
- #define EI_NIDENT 16
- typedef struct elf32_hdr {
- unsigned char e_ident[EI_NIDENT];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry; /* Entry point */
- 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;
- typedef struct elf64_hdr {
- unsigned char e_ident[16]; /* ELF "magic number" */
- Elf64_Half e_type;
- Elf64_Half e_machine;
- Elf64_Word e_version;
- Elf64_Addr e_entry; /* Entry point virtual address */
- Elf64_Off e_phoff; /* Program header table file offset */
- Elf64_Off e_shoff; /* Section header table file offset */
- Elf64_Word e_flags;
- Elf64_Half e_ehsize;
- Elf64_Half e_phentsize;
- Elf64_Half e_phnum;
- Elf64_Half e_shentsize;
- Elf64_Half e_shnum;
- Elf64_Half e_shstrndx;
- } Elf64_Ehdr;
- /* These constants define the permissions on sections in the program
- header, p_flags. */
- #define PF_R 0x4
- #define PF_W 0x2
- #define PF_X 0x1
- typedef struct elf32_phdr {
- 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_phdr {
- Elf64_Word p_type;
- Elf64_Word p_flags;
- Elf64_Off p_offset; /* Segment file offset */
- Elf64_Addr p_vaddr; /* Segment virtual address */
- Elf64_Addr p_paddr; /* Segment physical address */
- Elf64_Xword p_filesz; /* Segment size in file */
- Elf64_Xword p_memsz; /* Segment size in memory */
- Elf64_Xword p_align; /* Segment alignment, file & memory */
- } Elf64_Phdr;
- #define EI_MAG0 0 /* e_ident[] indexes */
- #define EI_MAG1 1
- #define EI_MAG2 2
- #define EI_MAG3 3
- #define EI_CLASS 4
- #define EI_DATA 5
- #define EI_VERSION 6
- #define EI_OSABI 7
- #define EI_PAD 8
- #define ELFMAG0 0x7f /* EI_MAG */
- #define ELFMAG1 'E'
- #define ELFMAG2 'L'
- #define ELFMAG3 'F'
- #define ELFMAG "\177ELF"
- #define SELFMAG 4
- #define ELFCLASSNONE 0 /* EI_CLASS */
- #define ELFCLASS32 1
- #define ELFCLASS64 2
- #define ELFCLASSNUM 3
- #define ELFDATANONE 0 /* e_ident[EI_DATA] */
- #define ELFDATA2LSB 1
- #define ELFDATA2MSB 2
- #define EV_NONE 0 /* e_version, EI_VERSION */
- #define EV_CURRENT 1
- #define EV_NUM 2
- #define ELFOSABI_NONE 0
- #define ELFOSABI_LINUX 3
- struct elf_info {
- unsigned long loadsize;
- unsigned long memsize;
- unsigned long elfoffset;
- };
- int parse_elf64(void *hdr, struct elf_info *info);
- int parse_elf32(void *hdr, struct elf_info *info);
- #endif /* _PPC_BOOT_ELF_H_ */
|