From: Calvin Johnson <linux.cj@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/4] elf: Add a very simple elf64 loader
Date: Wed, 11 Apr 2018 00:34:41 +0530 [thread overview]
Message-ID: <20180410190441.GA2831@gmail.com> (raw)
In-Reply-To: <1523341711-721-3-git-send-email-bmeng.cn@gmail.com>
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.cn@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?
> * entry point address.
> */
> @@ -34,6 +65,9 @@ static unsigned long load_elf_image_phdr(unsigned long addr)
> int i;
>
> ehdr = (Elf32_Ehdr *)addr;
> + if (ehdr->e_ident[EI_CLASS] == ELFCLASS64)
> + return load_elf64_image_phdr(addr);
> +
> phdr = (Elf32_Phdr *)(addr + ehdr->e_phoff);
>
> /* Load each program header */
> --
> 2.7.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
next prev parent reply other threads:[~2018-04-10 19:04 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-10 6:28 [U-Boot] [PATCH 1/4] elf: Clean up the ELF header file Bin Meng
2018-04-10 6:28 ` [U-Boot] [PATCH 2/4] elf: Add ELF64 related structure defines Bin Meng
2018-04-10 6:28 ` [U-Boot] [PATCH 3/4] elf: Add a very simple elf64 loader Bin Meng
2018-04-10 19:04 ` Calvin Johnson [this message]
2018-04-11 1:27 ` Bin Meng
2018-04-10 6:28 ` [U-Boot] [PATCH 4/4] doc: vxworks: Mention support of loading 64-bit x86 kernels Bin Meng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180410190441.GA2831@gmail.com \
--to=linux.cj@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox