Patchwork [U-Boot] Do not copy elf section to same adress

login
register
mail settings
Submitter Matthias Weisser
Date Jan. 18, 2011, 4:14 p.m.
Message ID <1295367283-4696-1-git-send-email-weisserm@arcor.de>
Download mbox | patch
Permalink /patch/79325/
State Superseded
Headers show

Comments

Matthias Weisser - Jan. 18, 2011, 4:14 p.m.
When an elf section is already at the right position (e.g. after image
decompression by bootm) there is no need to copy it.

Signed-off-by: Matthias Weisser <weisserm@arcor.de>
---
 common/cmd_elf.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)
Wolfgang Denk - Jan. 19, 2011, 8:40 a.m.
Dear Matthias Weisser,

In message <1295367283-4696-1-git-send-email-weisserm@arcor.de> you wrote:
> When an elf section is already at the right position (e.g. after image
> decompression by bootm) there is no need to copy it.
> 
> Signed-off-by: Matthias Weisser <weisserm@arcor.de>
> ---
>  common/cmd_elf.c |    7 ++++---
>  1 files changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/common/cmd_elf.c b/common/cmd_elf.c
> index bf32612..aec4579 100644
> --- a/common/cmd_elf.c
> +++ b/common/cmd_elf.c
> @@ -342,9 +342,10 @@ static unsigned long load_elf_image_shdr(unsigned long addr)
>  			memset ((void *)shdr->sh_addr, 0, shdr->sh_size);
>  		} else {
>  			image = (unsigned char *) addr + shdr->sh_offset;
> -			memcpy ((void *) shdr->sh_addr,
> -				(const void *) image,
> -				shdr->sh_size);
> +			if ((void *) shdr->sh_addr != (void *) image)
> +				memcpy((void *) shdr->sh_addr,
> +					(const void *) image,
> +					shdr->sh_size);

Braces required for multi-line statement.

Best regards,

Wolfgang Denk

Patch

diff --git a/common/cmd_elf.c b/common/cmd_elf.c
index bf32612..aec4579 100644
--- a/common/cmd_elf.c
+++ b/common/cmd_elf.c
@@ -342,9 +342,10 @@  static unsigned long load_elf_image_shdr(unsigned long addr)
 			memset ((void *)shdr->sh_addr, 0, shdr->sh_size);
 		} else {
 			image = (unsigned char *) addr + shdr->sh_offset;
-			memcpy ((void *) shdr->sh_addr,
-				(const void *) image,
-				shdr->sh_size);
+			if ((void *) shdr->sh_addr != (void *) image)
+				memcpy((void *) shdr->sh_addr,
+					(const void *) image,
+					shdr->sh_size);
 		}
 		flush_cache (shdr->sh_addr, shdr->sh_size);
 	}