public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] cmd_elf: CONFIG_ELF_SIMPLE_LOAD: load ELFs according to PHDRs
@ 2008-11-02  5:20 Mike Frysinger
  2008-12-05 22:21 ` Wolfgang Denk
  2010-10-02 19:44 ` [U-Boot] [PATCH] cmd_elf: add an option for loading " Mike Frysinger
  0 siblings, 2 replies; 6+ messages in thread
From: Mike Frysinger @ 2008-11-02  5:20 UTC (permalink / raw)
  To: u-boot

The current ELF loading function does a lot of work above and beyond a
simple "loading".  It ignores the real load addresses and loads things into
their virtual (runtime) address.  This is undesirable when we just want it
to load an ELF and let the ELF do the actual C runtime init.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 common/cmd_elf.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/common/cmd_elf.c b/common/cmd_elf.c
index 3ebb6d9..7b82749 100644
--- a/common/cmd_elf.c
+++ b/common/cmd_elf.c
@@ -276,6 +276,32 @@ int valid_elf_image (unsigned long addr)
  * A very simple elf loader, assumes the image is valid, returns the
  * entry point address.
  * ====================================================================== */
+#ifdef CONFIG_ELF_SIMPLE_LOAD
+unsigned long load_elf_image (unsigned long addr)
+{
+	Elf32_Ehdr *ehdr;
+	Elf32_Phdr *phdr;
+	unsigned long entry;
+	size_t i;
+
+	ehdr = (Elf32_Ehdr *) addr;
+	phdr = (Elf32_Phdr *) (addr + ehdr->e_phoff);
+
+	entry = ehdr->e_entry;
+
+	/* Load each program header */
+	for (i = 0; i < ehdr->e_phnum; ++i) {
+		void *dst = (void *) phdr->p_paddr;
+		void *src = (void *) addr + phdr->p_offset;
+		printf ("Loading phdr %i to 0x%p (%i bytes)\n",
+		        i, dst, phdr->p_filesz);
+		memcpy (dst, src, phdr->p_filesz);
+		++phdr;
+	}
+
+	return entry;
+}
+#else
 unsigned long load_elf_image (unsigned long addr)
 {
 	Elf32_Ehdr *ehdr;		/* Elf header structure pointer     */
@@ -327,6 +353,7 @@ unsigned long load_elf_image (unsigned long addr)
 
 	return ehdr->e_entry;
 }
+#endif
 
 /* ====================================================================== */
 U_BOOT_CMD(
-- 
1.6.0.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-10-06 20:42 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-02  5:20 [U-Boot] [PATCH] cmd_elf: CONFIG_ELF_SIMPLE_LOAD: load ELFs according to PHDRs Mike Frysinger
2008-12-05 22:21 ` Wolfgang Denk
2008-12-06  1:02   ` Mike Frysinger
2008-12-07  0:21     ` Wolfgang Denk
2010-10-02 19:44 ` [U-Boot] [PATCH] cmd_elf: add an option for loading " Mike Frysinger
2010-10-06 20:42   ` Wolfgang Denk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox