www.pudn.com > potemkin_sourceforPSP.rar > ElfTypes.h


#pragma once  
 
/////////////////////// 
// ELF Header Constants 
 
// File type 
enum ElfType 
{ 
	ET_NONE        =0, 
	ET_REL         =1, 
	ET_EXEC        =2, 
	ET_DYN         =3, 
	ET_CORE        =4, 
	ET_LOPROC =0xFF00, 
	ET_HIPROC =0xFFFF, 
}; 
 
// Machine/Architecture 
enum ElfMachine 
{ 
	EM_NONE  =0, 
	EM_M32   =1, 
	EM_SPARC =2, 
	EM_386   =3, 
	EM_68K   =4, 
	EM_88K   =5, 
	EM_860   =7, 
	EM_MIPS  =8 
}; 
 
// File version 
#define EV_NONE    0 
#define EV_CURRENT 1 
 
// Identification index 
#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 
#define EI_PAD     7 
#define EI_NIDENT 16 
 
// Magic number 
#define ELFMAG0 0x7F 
#define ELFMAG1  'E' 
#define ELFMAG2  'L' 
#define ELFMAG3  'F' 
 
// File class 
#define ELFCLASSNONE 0 
#define ELFCLASS32   1 
#define ELFCLASS64   2 
 
// Encoding 
#define ELFDATANONE 0 
#define ELFDATA2LSB 1 
#define ELFDATA2MSB 2 
 
 
///////////////////// 
// Sections constants 
 
// Section indexes 
#define SHN_UNDEF          0 
#define SHN_LORESERVE 0xFF00 
#define SHN_LOPROC    0xFF00 
#define SHN_HIPROC    0xFF1F 
#define SHN_ABS       0xFFF1 
#define SHN_COMMON    0xFFF2 
#define SHN_HIRESERVE 0xFFFF 
 
// Section types 
#define SHT_NULL            0 
#define SHT_PROGBITS        1 
#define SHT_SYMTAB          2 
#define SHT_STRTAB          3 
#define SHT_RELA            4 
#define SHT_HASH            5 
#define SHT_DYNAMIC         6 
#define SHT_NOTE            7 
#define SHT_NOBITS          8 
#define SHT_REL             9 
#define SHT_SHLIB          10 
#define SHT_DYNSYM         11 
#define SHT_LOPROC 0x70000000 
#define SHT_HIPROC 0x7FFFFFFF 
#define SHT_LOUSER 0x80000000 
#define SHT_HIUSER 0xFFFFFFFF 
 
// Custom section types 
#define SHT_PSPREL 0x700000a0 
 
 
// Section flags 
enum ElfSectionFlags 
{ 
	SHF_WRITE     =0x1, 
	SHF_ALLOC     =0x2, 
	SHF_EXECINSTR =0x4, 
	SHF_MASKPROC  =0xF0000000, 
}; 
 
// Symbol binding  
#define STB_LOCAL   0  
#define STB_GLOBAL  1  
#define STB_WEAK    2  
#define STB_LOPROC 13  
#define STB_HIPROC 15  
 
// Symbol types 
#define STT_NOTYPE   0 
#define STT_OBJECT   1 
#define STT_FUNC     2 
#define STT_SECTION  3 
#define STT_FILE     4 
#define STT_LOPROC  13 
#define STT_HIPROC  15 
 
// Undefined name 
#define STN_UNDEF 0 
 
// Relocation types 
#define R_386_NONE      0 
#define R_386_32        1 
#define R_386_PC32      2 
#define R_386_GOT32     3 
#define R_386_PLT32     4 
#define R_386_COPY      5 
#define R_386_GLOB_DAT  6 
#define R_386_JMP_SLOT  7 
#define R_386_RELATIVE  8 
#define R_386_GOTOFF    9 
#define R_386_GOTPC    10 
 
// Segment types 
#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_LOPROC  0x70000000 
#define PT_HIPROC  0x7FFFFFFF 
 
// Segment flags 
#define PF_X 1 
#define PF_W 2 
#define PF_R 4 
 
// Dynamic Array Tags 
#define DT_NULL              0 
#define DT_NEEDED            1 
#define DT_PLTRELSZ          2 
#define DT_PLTGOT            3 
#define DT_HASH              4 
#define DT_STRTAB            5 
#define DT_SYMTAB            6 
#define DT_RELA              7 
#define DT_RELASZ            8 
#define DT_RELAENT           9 
#define DT_STRSZ            10 
#define DT_SYMENT           11 
#define DT_INIT             12 
#define DT_FINI             13 
#define DT_SONAME           14 
#define DT_RPATH            15 
#define DT_SYMBOLIC         16 
#define DT_REL              17 
#define DT_RELSZ            18 
#define DT_RELENT           19 
#define DT_PLTREL           20 
#define DT_DEBUG            21 
#define DT_TEXTREL          22 
#define DT_JMPREL           23 
#define DT_LOPROC   0x70000000 
#define DT_HIPROC   0x7FFFFFFF 
 
typedef unsigned long  Elf32_Addr; 
typedef unsigned short Elf32_Half; 
typedef unsigned long  Elf32_Off; 
typedef signed   long  Elf32_Sword; 
typedef unsigned long  Elf32_Word; 
 
 
// ELF file header 
struct Elf32_Ehdr  
{ 
    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; 
}; 
 
// Section header 
struct Elf32_Shdr  
{ 
    Elf32_Word sh_name; 
    Elf32_Word sh_type; 
    Elf32_Word sh_flags; 
    Elf32_Addr sh_addr; 
    Elf32_Off  sh_offset; 
    Elf32_Word sh_size; 
    Elf32_Word sh_link; 
    Elf32_Word sh_info; 
    Elf32_Word sh_addralign; 
    Elf32_Word sh_entsize; 
}; 
 
// Segment header 
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; 
}; 
 
// Symbol table entry 
struct Elf32_Sym  
{ 
    Elf32_Word    st_name; 
    Elf32_Addr    st_value; 
    Elf32_Word    st_size; 
    unsigned char st_info; 
    unsigned char st_other; 
    Elf32_Half    st_shndx; 
}; 
 
#define ELF32_ST_BIND(i)   ((i)>>4) 
#define ELF32_ST_TYPE(i)   ((i)&0xf) 
#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf)) 
 
// Relocation entries 
struct Elf32_Rel  
{ 
    Elf32_Addr r_offset; 
    Elf32_Word r_info; 
}; 
 
struct Elf32_Rela  
{ 
    Elf32_Addr  r_offset; 
    Elf32_Word  r_info; 
    Elf32_Sword r_addend; 
}; 
 
#define ELF32_R_SYM(i) ((i)>>8) 
#define ELF32_R_TYPE(i) ((unsigned char)(i)) 
#define ELF32_R_INFO(s,t) (((s)<<8 )+(unsigned char)(t)) 
 
 
struct Elf32_Dyn  
{ 
	Elf32_Sword d_tag; 
	union  
	{ 
		Elf32_Word d_val; 
        Elf32_Addr d_ptr; 
    } d_un; 
};