From f0c187dd6479996b83f85b6decf303ec0fc70fe5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Fri, 6 Jan 2017 09:10:23 -0800 Subject: ao-tools/ao-usbload: Pad image with 0xff instead of random bits Clear the temporary block to 0xff before copying in the target data so that any unused bytes end up being left at 0xff instead of inheriting whatever data was in the block before. Signed-off-by: Keith Packard --- ao-tools/lib/ao-selfload.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ao-tools/lib') diff --git a/ao-tools/lib/ao-selfload.c b/ao-tools/lib/ao-selfload.c index 0a23dfda..754cd784 100644 --- a/ao-tools/lib/ao-selfload.c +++ b/ao-tools/lib/ao-selfload.c @@ -110,6 +110,7 @@ ao_self_write(struct cc_usb *cc, struct ao_hex_image *image) start = image->address; if (stop > image->address + image->length) stop = image->address + image->length; + memset(block, 0xff, 0x100); memcpy(block + start - address, image->data + start - image->address, stop - start); ao_self_block_write(cc, address, block); ao_self_block_read(cc, address, check); -- cgit v1.2.3 From 04d4b17635fc9395c70aa0840971c00082f509ba Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sun, 9 Apr 2017 12:48:54 -0700 Subject: ao-elftohex: Add conditions for skipping ELF sections Skip sections with size 0, or which are of type SHT_NOBITS or which don't have the SHF_ALLOC flag set. This avoids crashing on sections which don't have any data to copy. Signed-off-by: Keith Packard --- ao-tools/ao-elftohex/ao-elftohex.c | 1 + ao-tools/lib/ao-elf.c | 17 ++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'ao-tools/lib') diff --git a/ao-tools/ao-elftohex/ao-elftohex.c b/ao-tools/ao-elftohex/ao-elftohex.c index 265908c5..f3ab0c38 100644 --- a/ao-tools/ao-elftohex/ao-elftohex.c +++ b/ao-tools/ao-elftohex/ao-elftohex.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "ao-hex.h" #include "ao-elf.h" #include "ao-verbose.h" diff --git a/ao-tools/lib/ao-elf.c b/ao-tools/lib/ao-elf.c index c44102f8..cc127b62 100644 --- a/ao-tools/lib/ao-elf.c +++ b/ao-tools/lib/ao-elf.c @@ -186,6 +186,7 @@ load_write(struct ao_hex_image *from, uint32_t address, uint32_t length, void *d return new; } +#define DBG 0 /* * Construct a large in-memory block for all * of the loaded sections of the program @@ -202,7 +203,7 @@ get_load(Elf *e) GElf_Phdr phdr; GElf_Addr sh_paddr; struct ao_hex_image *load = NULL; -#if 0 +#if DBG char *section_name; #endif size_t nshdr; @@ -231,7 +232,7 @@ get_load(Elf *e) /* Get the associated file section */ -#if 0 +#if DBG fprintf (stderr, "offset %08x vaddr %08x paddr %08x filesz %08x memsz %08x\n", (uint32_t) phdr.p_offset, (uint32_t) phdr.p_vaddr, @@ -252,18 +253,16 @@ get_load(Elf *e) abort(); } -#if 0 +#if DBG section_name = elf_strptr(e, shstrndx, shdr.sh_name); #endif - if (phdr.p_offset <= shdr.sh_offset && shdr.sh_offset < phdr.p_offset + phdr.p_filesz) { - - if (shdr.sh_size == 0) - continue; - + if (shdr.sh_size != 0 && shdr.sh_type != SHT_NOBITS && (shdr.sh_flags & SHF_ALLOC) && + phdr.p_offset <= shdr.sh_offset && shdr.sh_offset < phdr.p_offset + phdr.p_filesz) + { sh_paddr = phdr.p_paddr + shdr.sh_offset - phdr.p_offset; -#if 0 +#if DBG fprintf (stderr, "\tsize %08x rom %08x exec %08x %s\n", (uint32_t) shdr.sh_size, (uint32_t) sh_paddr, -- cgit v1.2.3