+}\r
+\r
+tBinary *Elf_Load64(int FD, Elf64_Ehdr *Header)\r
+{\r
+ tBinary *ret;\r
+ Elf64_Phdr phtab[Header->e_phnum];\r
+ int nLoadSegments;\r
+ int i, j;\r
+ \r
+ // Sanity check\r
+ if( Header->e_phoff == 0 )\r
+ {\r
+ Log_Warning("ELF", "No program header, panic!");\r
+ return NULL;\r
+ }\r
+ if( Header->e_shentsize != sizeof(Elf64_Shdr) ) {\r
+ Log_Warning("ELF", "Header gives shentsize as %i, my type is %i",\r
+ Header->e_shentsize, sizeof(Elf64_Shdr) );\r
+ }\r
+ if( Header->e_phentsize != sizeof(Elf64_Phdr) ) {\r
+ Log_Warning("ELF", "Header gives phentsize as %i, my type is %i",\r
+ Header->e_phentsize, sizeof(Elf64_Phdr) );\r
+ }\r
+\r
+ LOG("Header = {");\r
+ LOG(" e_ident = %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x",\r
+ Header->e_ident[0], Header->e_ident[1], Header->e_ident[2], Header->e_ident[3],\r
+ Header->e_ident[4], Header->e_ident[5], Header->e_ident[6], Header->e_ident[7],\r
+ Header->e_ident[8], Header->e_ident[9], Header->e_ident[10], Header->e_ident[11],\r
+ Header->e_ident[12], Header->e_ident[13], Header->e_ident[14], Header->e_ident[15]\r
+ );\r
+ LOG(" e_type = %i", Header->e_type);\r
+ LOG(" e_machine = %i", Header->e_machine);\r
+ LOG(" e_version = %i", Header->e_version);\r
+ LOG(" e_entry = 0x%llx", Header->e_entry);\r
+ LOG(" e_phoff = 0x%llx", Header->e_phoff);\r
+ LOG(" e_shoff = 0x%llx", Header->e_shoff);\r
+ LOG(" e_flags = 0x%x", Header->e_flags);\r
+ LOG(" e_ehsize = %i", Header->e_ehsize);\r
+ LOG(" e_phentsize = %i", Header->e_phentsize);\r
+ LOG(" e_phnum = %i", Header->e_phnum);\r
+ LOG(" e_shentsize = %i", Header->e_shentsize);\r
+ LOG(" e_shnum = %i", Header->e_shnum);\r
+ LOG(" e_shstrndx = %i", Header->e_shstrndx);\r
+ LOG("}");\r
+\r
+ // Load Program Header table\r
+ VFS_Seek(FD, Header->e_phoff, SEEK_SET);\r
+ VFS_Read(FD, sizeof(Elf64_Phdr)*Header->e_phnum, phtab);\r
+\r
+ // Count load segments\r
+ nLoadSegments = 0;\r
+ for( i = 0; i < Header->e_phnum; i ++ )\r
+ {\r
+ if( phtab[i].p_type != PT_LOAD ) continue ;\r
+ nLoadSegments ++;\r
+ }\r