target/image: report error if ELF file contains no loadable sections

The existing code asserted in that case, which is not correct. This
would allow the user to crash OpenOCD with a bad ELF file, which is
not what we want. A proper error should be reported in that case and
OpenOCD should not crash.

Change-Id: Ied5a6a6fd4ee0fd163f3fe850d304a121ecbe33a
Signed-off-by: Christian Hoff <christian.hoff@advantest.com>
Reviewed-on: http://openocd.zylin.com/6172
Reviewed-by: Jonathan McDowell <noodles-openocd@earth.li>
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Christian Hoff 2021-04-20 19:14:30 +02:00 committed by Antonio Borneo
parent 9206bd243b
commit 565129119f
1 changed files with 8 additions and 2 deletions

View File

@ -426,7 +426,10 @@ static int image_elf32_read_headers(struct image *image)
(field32(elf, elf->segments32[i].p_filesz) != 0))
image->num_sections++;
assert(image->num_sections > 0);
if (image->num_sections == 0) {
LOG_ERROR("invalid ELF file, no loadable segments");
return ERROR_IMAGE_FORMAT_ERROR;
}
/**
* some ELF linkers produce binaries with *all* the program header
@ -548,7 +551,10 @@ static int image_elf64_read_headers(struct image *image)
(field64(elf, elf->segments64[i].p_filesz) != 0))
image->num_sections++;
assert(image->num_sections > 0);
if (image->num_sections == 0) {
LOG_ERROR("invalid ELF file, no loadable segments");
return ERROR_IMAGE_FORMAT_ERROR;
}
/**
* some ELF linkers produce binaries with *all* the program header