@@ -875,34 +875,7 @@ static EFI_STATUS kernel_load(boot_kernel_t* kernel, EFI_FILE* rootHandle)
875875 }
876876
877877 Print (L" Loading kernel...\n" );
878- Elf64_Ehdr * header = (Elf64_Ehdr * )kernel -> elf .header ;
879- for (uint32_t i = 0 ; i < header -> e_phnum ; i ++ )
880- {
881- Elf64_Phdr * phdr = ELF64_GET_PHDR (& kernel -> elf , i );
882- if (phdr -> p_type != PT_LOAD )
883- {
884- Print (L" Skipping non-loadable segment %u\n" , i );
885- continue ;
886- }
887- Print (L" Loading segment %u: vaddr=0x%lx, offset=0x%lx, filesz=%lu, memsz=%lu\n" , i , phdr -> p_vaddr ,
888- phdr -> p_offset , phdr -> p_filesz , phdr -> p_memsz );
889- void * dest = (void * )(kernelPhys + (phdr -> p_vaddr - minVaddr ));
890- void * src = ELF64_AT_OFFSET (& kernel -> elf , phdr -> p_offset );
891- Print (L" First bytes: " );
892- for (size_t j = 0 ; j < MIN (4 , phdr -> p_filesz ); j ++ )
893- {
894- Print (L"%02x " , ((uint8_t * )src )[j ]);
895- }
896- Print (L"\n" );
897- Print (L" Copying %lu bytes from 0x%lx to 0x%lx\n" , phdr -> p_filesz , src , dest );
898- memcpy (dest , src , phdr -> p_filesz );
899- if (phdr -> p_memsz > phdr -> p_filesz )
900- {
901- Print (L" Zeroing %lu bytes at 0x%lx\n" , phdr -> p_memsz - phdr -> p_filesz ,
902- (uintptr_t )dest + phdr -> p_filesz );
903- memset ((void * )((uintptr_t )dest + phdr -> p_filesz ), 0 , phdr -> p_memsz - phdr -> p_filesz );
904- }
905- }
878+ elf64_load_segments (& kernel -> elf , kernelPhys , minVaddr );
906879 kernel -> physAddr = (void * )kernelPhys ;
907880
908881 Print (L" Entry Code: " );
0 commit comments