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);
+			}
 		}
 		flush_cache (shdr->sh_addr, shdr->sh_size);
 	}
