On Wed, Apr 11, 2018 at 3:04 AM, Calvin Johnson <linux...@gmail.com> wrote: > On Mon, Apr 09, 2018 at 11:28:30PM -0700, Bin Meng wrote: >> This adds a very simple elf64 loader via program headers, similar >> to load_elf_image_phdr() that we already have. >> >> Signed-off-by: Bin Meng <bmeng...@gmail.com> >> --- >> >> cmd/elf.c | 34 ++++++++++++++++++++++++++++++++++ >> 1 file changed, 34 insertions(+) >> >> diff --git a/cmd/elf.c b/cmd/elf.c >> index 501f935..91a04da 100644 >> --- a/cmd/elf.c >> +++ b/cmd/elf.c >> @@ -24,6 +24,37 @@ >> #endif >> >> /* >> + * A very simple elf64 loader, assumes the image is valid, returns the >> + * entry point address. >> + */ >> +static unsigned long load_elf64_image_phdr(unsigned long addr) >> +{ >> + Elf64_Ehdr *ehdr; /* Elf header structure pointer */ >> + Elf64_Phdr *phdr; /* Program header structure pointer */ >> + int i; >> + >> + ehdr = (Elf64_Ehdr *)addr; >> + phdr = (Elf64_Phdr *)(addr + (ulong)ehdr->e_phoff); >> + >> + /* Load each program header */ >> + for (i = 0; i < ehdr->e_phnum; ++i) { >> + void *dst = (void *)(ulong)phdr->p_paddr; >> + void *src = (void *)addr + phdr->p_offset; >> + debug("Loading phdr %i to 0x%p (%lu bytes)\n", >> + i, dst, (ulong)phdr->p_filesz); >> + if (phdr->p_filesz) >> + memcpy(dst, src, phdr->p_filesz); >> + if (phdr->p_filesz != phdr->p_memsz) >> + memset(dst + phdr->p_filesz, 0x00, >> + phdr->p_memsz - phdr->p_filesz); >> + flush_cache((unsigned long)dst, phdr->p_filesz); >> + ++phdr; >> + } >> + >> + return ehdr->e_entry; >> +} >> + >> +/* >> * A very simple elf loader, assumes the image is valid, returns the > Would it be good to modify this comment to indicate elf32 loader?
Will add some more comments in v2. Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot