--- /dev/null
+#ifndef _LINUX_ELF_H
+#define _LINUX_ELF_H
+
+//#include <asm/elf.h>
+
+//typedef unsigned long Elf32_Addr;
+//typedef unsigned short Elf32_Half;
+//typedef unsigned long Elf32_Off;
+//typedef long Elf32_Sword;
+//typedef unsigned long Elf32_Word;
+
+/* 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_LOPROC 0x70000000
+#define PT_HIPROC 0x7fffffff
+
+/* 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 5
+#define ET_HIPROC 6
+
+/* These constants define the various ELF target machines */
+#define EM_NONE 0
+#define EM_M32 1
+#define EM_SPARC 2
+#define EM_386 3
+#define EM_68K 4
+#define EM_88K 5
+#define EM_486 6 /* Perhaps disused */
+#define EM_860 7
+
+#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
+
+#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
+
+#define EM_SPARC64 11 /* SPARC v9 (not official) 64-bit */
+
+#define EM_PARISC 15 /* HPPA */
+
+#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
+
+#define EM_PPC 20 /* PowerPC */
+
+/*
+ * This is an interim value that we will use until the committee comes
+ * up with a final number.
+ */
+#define EM_ALPHA 0x9026
+
+
+/* This is the info that is needed to parse the dynamic section of the file */
+#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
+
+/* This info is needed when parsing the symbol table */
+#define STB_LOCAL 0
+#define STB_GLOBAL 1
+#define STB_WEAK 2
+
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+
+#define ELF32_ST_BIND(x) ((x) >> 4)
+#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf)
+
+/* Symbolic values for the entries in the auxiliary table
+ put on the initial stack */
+#define AT_NULL 0 /* end of vector */
+#define AT_IGNORE 1 /* entry should be ignored */
+#define AT_EXECFD 2 /* file descriptor of program */
+#define AT_PHDR 3 /* program headers for program */
+#define AT_PHENT 4 /* size of program header entry */
+#define AT_PHNUM 5 /* number of program headers */
+#define AT_PAGESZ 6 /* system page size */
+#define AT_BASE 7 /* base address of interpreter */
+#define AT_FLAGS 8 /* flags */
+#define AT_ENTRY 9 /* entry point of program */
+#define AT_NOTELF 10 /* program is not ELF */
+#define AT_UID 11 /* real uid */
+#define AT_EUID 12 /* effective uid */
+#define AT_GID 13 /* real gid */
+#define AT_EGID 14 /* effective gid */
+
+
+//typedef struct dynamic{
+// Elf32_Sword d_tag;
+// union{
+// Elf32_Sword d_val;
+// Elf32_Addr d_ptr;
+// } d_un;
+//} Elf32_Dyn;
+
+//typedef struct {
+// unsigned long long d_tag; /* entry tag value */
+// union {
+// unsigned long long d_val;
+// unsigned long long d_ptr;
+// } d_un;
+//} Elf64_Dyn;
+
+/* The following are used with relocations */
+#define ELF32_R_SYM(x) ((x) >> 8)
+#define ELF32_R_TYPE(x) ((x) & 0xff)
+
+#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
+#define R_386_NUM 11
+
+//typedef struct elf32_rel {
+// Elf32_Addr r_offset;
+// Elf32_Word r_info;
+//} Elf32_Rel;
+
+//typedef struct elf64_rel {
+// unsigned long long r_offset; /* Location at which to apply the action */
+// unsigned long long r_info; /* index and type of relocation */
+//} Elf64_Rel;
+
+//typedef struct elf32_rela{
+// Elf32_Addr r_offset;
+// Elf32_Word r_info;
+// Elf32_Sword r_addend;
+//} Elf32_Rela;
+
+//typedef struct elf64_rela {
+// unsigned long long r_offset; /* Location at which to apply the action */
+// unsigned long long r_info; /* index and type of relocation */
+// unsigned long long r_addend; /* Constant addend used to compute value */
+//} Elf64_Rela;
+
+//typedef 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;
+//} Elf32_Sym;
+
+//typedef struct elf64_sym {
+// unsigned int st_name; /* Symbol name, index in string tbl */
+// unsigned char st_info; /* Type and binding attributes */
+// unsigned char st_other; /* No defined meaning, 0 */
+// unsigned short st_shndx; /* Associated section index */
+// unsigned long long st_value; /* Value of the symbol */
+// unsigned long long st_size; /* Associated symbol size */
+//} Elf64_Sym;
+
+
+#define EI_NIDENT 16
+
+// ELFヘッダ
+//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;
+// シグネチャ 0x7f, 'E', 'L', 'F'
+#define EH_ID_SIGNATURE (0)
+#define EH_ID_SIGNATURE_SIZE (4)
+// 32, 64区分
+#define EH_ID_CLASS (EH_ID_SIGNATURE + EH_ID_SIGNATURE_SIZE)
+#define EH_ID_CLASS_SIZE (1)
+// エンディアン
+#define EH_ID_ENDIAN (EH_ID_CLASS + EH_ID_CLASS_SIZE)
+#define EH_ID_ENDIAN_SIZE (1)
+// バージョン
+#define EH_ID_VERSION (EH_ID_ENDIAN + EH_ID_ENDIAN_SIZE)
+#define EH_ID_VERSION_SIZE (1)
+// ABIタイプ
+#define EH_ID_ABI (EH_ID_VERSION + EH_ID_VERSION_SIZE)
+#define EH_ID_ABI_SIZE (1)
+// ABIバージョン
+#define EH_ID_ABI_VERSION (EH_ID_ABI + EH_ID_ABI_SIZE)
+#define EH_ID_ABI_VERSION_SIZE (1)
+// 予約
+#define EH_ID_RESERVED (EH_ID_ABI_VERSION + EH_ID_ABI_VERSION_SIZE)
+#define EH_ID_RESERVED_SIZE (7)
+// ファイルタイプ
+#define EH_FILE_TYPE (EH_ID_RESERVED + EH_ID_RESERVED_SIZE)
+#define EH_FILE_TYPE_SIZE (2)
+// アーキテクチャ
+#define EH_ARCHITECTURE (EH_FILE_TYPE + EH_FILE_TYPE_SIZE)
+#define EH_ARCHITECTURE_SIZE (2)
+// バージョン
+#define EH_VERSION (EH_ARCHITECTURE + EH_ARCHITECTURE_SIZE)
+#define EH_VERSION_SIZE (4)
+// エントリポイント
+#define EH_ENTRYPOINT (EH_VERSION + EH_VERSION_SIZE)
+#define EH_ENTRYPOINT_SIZE (4)
+// プログラム・ヘッダ・オフセット
+#define EH_PROGRAM_HEADER_OFFSET (EH_ENTRYPOINT + EH_ENTRYPOINT_SIZE)
+#define EH_PROGRAM_HEADER_OFFSET_SIZE (4)
+// セクション・ヘッダ・オフセット
+#define EH_SECTION_HEADER_OFFSET (EH_PROGRAM_HEADER_OFFSET + EH_PROGRAM_HEADER_OFFSET_SIZE)
+#define EH_SECTION_HEADER_OFFSET_SIZE (4)
+// フラグ(未使用らしい。)
+#define EH_FLAGS (EH_SECTION_HEADER_OFFSET + EH_SECTION_HEADER_OFFSET_SIZE)
+#define EH_FLAGS_SIZE (4)
+// ELFヘッダサイズ
+#define EH_EH_SIZE (EH_FLAGS + EH_FLAGS_SIZE)
+#define EH_EH_SIZE_SIZE (2)
+// プログラム・ヘッダ・サイズ
+#define EH_PROGRAM_HEADER_SIZE (EH_EH_SIZE + EH_EH_SIZE_SIZE)
+#define EH_PROGRAM_HEADER_SIZE_SIZE (2)
+// プログラム・ヘッダ数
+#define EH_NUM_PROGRAM_HEADER (EH_PROGRAM_HEADER_SIZE + EH_PROGRAM_HEADER_SIZE_SIZE)
+#define EH_NUM_PH_SIZE (2)
+// セクション・ヘッダ・サイズ
+#define EH_SECTION_HEADER_SIZE (EH_NUM_PROGRAM_HEADER + EH_NUM_PH_SIZE)
+#define EH_SECTION_HEADER_SIZE_SIZE (2)
+// セクション・ヘッダ数
+#define EH_NUM_SECTION_HEADER (EH_SECTION_HEADER_SIZE + EH_SECTION_HEADER_SIZE_SIZE)
+#define EH_NUM_SECTION_HEADER_SIZE (2)
+// セクション名番号
+#define EH_SECTION_STRING_INDEX (EH_NUM_SECTION_HEADER + EH_NUM_SECTION_HEADER_SIZE)
+#define EH_SECTION_STRING_INDEX_SIZE (2)
+
+
+
+
+//typedef struct elf64_hdr {
+// unsigned char e_ident[16]; /* ELF "magic number" */
+// short int e_type;
+// short unsigned int e_machine;
+// int e_version;
+// unsigned long long e_entry; /* Entry point virtual address */
+// unsigned long long e_phoff; /* Program header table file offset */
+// unsigned long long e_shoff; /* Section header table file offset */
+// int e_flags;
+// short int e_ehsize;
+// short int e_phentsize;
+// short int e_phnum;
+// short int e_shentsize;
+// short int e_shnum;
+// short int 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;
+
+// セグメント・タイプ
+#define PH_TYPE (0)
+#define PH_TYPE_SIZE (4)
+// セグメント位置
+#define PH_OFFSET (PH_TYPE + PH_TYPE_SIZE)
+#define PH_OFFSET_SIZE (4)
+// 仮想アドレス
+#define PH_VIRTUAL_ADDRESS (PH_OFFSET + PH_OFFSET_SIZE)
+#define PH_VIRTUAL_ADDRESS_SIZE (4)
+// 物理アドレス
+#define PH_PHYSICAL_ADDRESS (PH_VIRTUAL_ADDRESS + PH_VIRTUAL_ADDRESS_SIZE)
+#define PH_PHYSICAL_ADDRESS_SIZE (4)
+// セグメント・サイズ
+#define PH_SEGMENT_SIZE (PH_PHYSICAL_ADDRESS + PH_PHYSICAL_ADDRESS_SIZE)
+#define PH_SEGMENT_SIZE_SIZE (4)
+// メモリ・サイズ
+#define PH_MEMORY_SIZE (PH_SEGMENT_SIZE + PH_SEGMENT_SIZE_SIZE)
+#define PH_MEMORY_SIZE_SIZE (4)
+// フラグ
+#define PH_FLAGS (PH_MEMORY_SIZE + PH_MEMORY_SIZE_SIZE)
+#define PH_FLAGS_SIZE (4)
+// アライメント
+#define PH_ALIGN (PH_FLAGS + PH_FLAGS_SIZE)
+#define PH_ALIGN_SIZE (4)
+
+//typedef struct elf64_phdr {
+// int p_type;
+// int p_flags;
+// unsigned long long p_offset; /* Segment file offset */
+// unsigned long long p_vaddr; /* Segment virtual address */
+// unsigned long long p_paddr; /* Segment physical address */
+// unsigned long long p_filesz; /* Segment size in file */
+// unsigned long long p_memsz; /* Segment size in memory */
+// unsigned long long p_align; /* Segment alignment, file & memory */
+//} Elf64_Phdr;
+
+/* sh_type */
+#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_NUM 12
+#define SHT_LOPROC 0x70000000
+#define SHT_HIPROC 0x7fffffff
+#define SHT_LOUSER 0x80000000
+#define SHT_HIUSER 0xffffffff
+
+/* sh_flags */
+#define SHF_WRITE 0x1
+#define SHF_ALLOC 0x2
+#define SHF_EXECINSTR 0x4
+#define SHF_MASKPROC 0xf0000000
+
+/* special 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
+
+//typedef struct {
+// 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;
+//} Elf32_Shdr;
+
+//typedef struct elf64_shdr {
+// unsigned int sh_name; /* Section name, index in string tbl */
+// unsigned int sh_type; /* Type of section */
+// unsigned long long sh_flags; /* Miscellaneous section attributes */
+// unsigned long long sh_addr; /* Section virtual addr at execution */
+// unsigned long long sh_offset; /* Section file offset */
+// unsigned long long sh_size; /* Size of section in bytes */
+// unsigned int sh_link; /* Index of another section */
+// unsigned int sh_info; /* Additional section information */
+// unsigned long long sh_addralign; /* Section alignment */
+// unsigned long long sh_entsize; /* Entry size if section holds table */
+//} Elf64_Shdr;
+
+#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_PAD 7
+
+#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
+
+/* Notes used in ET_CORE */
+#define NT_PRSTATUS 1
+#define NT_PRFPREG 2
+#define NT_PRPSINFO 3
+#define NT_TASKSTRUCT 4
+
+/* Note header in a PT_NOTE section */
+//typedef struct elf32_note {
+// Elf32_Word n_namesz; /* Name size */
+// Elf32_Word n_descsz; /* Content size */
+// Elf32_Word n_type; /* Content type */
+//} Elf32_Nhdr;
+
+/* Note header in a PT_NOTE section */
+/*
+ * For now we use the 32 bit version of the structure until we figure
+ * out whether we need anything better. Note - on the Alpha, "unsigned int"
+ * is only 32 bits.
+ */
+//typedef struct elf64_note {
+// unsigned int n_namesz; /* Name size */
+// unsigned int n_descsz; /* Content size */
+// unsigned int n_type; /* Content type */
+//} Elf64_Nhdr;
+
+#define ELF_START_MMAP 0x80000000
+
+#if ELF_CLASS == ELFCLASS32
+
+extern Elf32_Dyn _DYNAMIC [];
+#define elfhdr elf32_hdr
+#define elf_phdr elf32_phdr
+#define elf_note elf32_note
+
+#else
+
+//extern Elf64_Dyn _DYNAMIC [];
+#define elfhdr elf64_hdr
+#define elf_phdr elf64_phdr
+#define elf_note elf64_note
+
+#endif
+
+
+#endif /* _LINUX_ELF_H */