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

Wolfgang Denk wd at denx.de
Mon Apr 11 21:59:54 CEST 2011


Dear Matthias Weisser,

In message <1295435020-14190-1-git-send-email-weisserm at 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. This saves some ms
> when bootig an elf image.
> 
> Changes since V1
>   - Fixed style issues
> 
> Signed-off-by: Matthias Weisser <weisserm at arcor.de>
> ---
>  common/cmd_elf.c |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/common/cmd_elf.c b/common/cmd_elf.c
> index bf32612..3537769 100644
> --- a/common/cmd_elf.c
> +++ b/common/cmd_elf.c
> @@ -342,9 +342,11 @@ 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);
> +			}

The idea is correct, but I think the implementation is suboptimal.
Instead of fixing this use case only, the test should be moved into
the implementation of memcpy() itself so any other callers with such a
situation benefit from it, too.

While we are at it, we should do the same with bcopy() and memmove(),
too.

Thanks.

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Marriage is the triumph  of  imagination  over  intelligence.  Second
marriage is the triumph of hope over experience.


More information about the U-Boot mailing list