| --- fis.orig/fis.c 2010-05-12 11:09:22.000000000 -0700 |
| +++ fis/fis.c 2010-05-12 11:05:45.000000000 -0700 |
| @@ -401,9 +401,24 @@ |
| dir_t dir; |
| load_dir(fd,offset,&size,swap_endianness,&dir); |
| fprintf(stdout,"Name FLASH addr Mem addr Length Entry point Checksum\n"); |
| - FOR_EACH_DIR_ENTRY(dir,i) { |
| - dump_desc(stdout,get(i)); |
| - } |
| + uint32_t last_addr = 0; |
| + bool image_found; |
| + do { |
| + uint32_t lowest_addr = 0xffffffff; |
| + iter_t index; |
| + image_found = false; |
| + FOR_EACH_DIR_ENTRY(dir,i) { |
| + const struct fis_image_desc *d = get(i); |
| + if ((d->flash_base >= last_addr) && (d->flash_base < lowest_addr)) { |
| + lowest_addr = d->flash_base; |
| + image_found = true; |
| + index = i; |
| + } |
| + } |
| + if (image_found) |
| + dump_desc(stdout,get(index)); |
| + last_addr = lowest_addr + 1; |
| + } while (image_found == true); |
| } |
| |
| |