Unverified Commit 6ef96ab4 authored by davidcunado-arm's avatar davidcunado-arm Committed by GitHub
Browse files

Merge pull request #1204 from davidcunado-arm/rv/fip_tool

Add padding at the end of the last entry
parents 86188567 4069fb5f
...@@ -1868,9 +1868,11 @@ Firmware Image Package layout ...@@ -1868,9 +1868,11 @@ Firmware Image Package layout
The FIP layout consists of a table of contents (ToC) followed by payload data. The FIP layout consists of a table of contents (ToC) followed by payload data.
The ToC itself has a header followed by one or more table entries. The ToC is The ToC itself has a header followed by one or more table entries. The ToC is
terminated by an end marker entry. All ToC entries describe some payload data terminated by an end marker entry, and since the size of the ToC is 0 bytes,
that has been appended to the end of the binary package. With the information the offset equals the total size of the FIP file. All ToC entries describe some
provided in the ToC entry the corresponding payload data can be retrieved. payload data that has been appended to the end of the binary package. With the
information provided in the ToC entry the corresponding payload data can be
retrieved.
:: ::
......
...@@ -492,7 +492,7 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a ...@@ -492,7 +492,7 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
fip_toc_header_t *toc_header; fip_toc_header_t *toc_header;
fip_toc_entry_t *toc_entry; fip_toc_entry_t *toc_entry;
char *buf; char *buf;
uint64_t entry_offset, buf_size, payload_size = 0; uint64_t entry_offset, buf_size, payload_size = 0, pad_size;
size_t nr_images = 0; size_t nr_images = 0;
for (desc = image_desc_head; desc != NULL; desc = desc->next) for (desc = image_desc_head; desc != NULL; desc = desc->next)
...@@ -526,9 +526,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a ...@@ -526,9 +526,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
entry_offset += image->toc_e.size; entry_offset += image->toc_e.size;
} }
/* Append a null uuid entry to mark the end of ToC entries. */ /*
* Append a null uuid entry to mark the end of ToC entries.
* NOTE the offset address for the last toc_entry must match the fip
* size.
*/
memset(toc_entry, 0, sizeof(*toc_entry)); memset(toc_entry, 0, sizeof(*toc_entry));
toc_entry->offset_address = entry_offset; toc_entry->offset_address = (entry_offset + align - 1) & ~(align - 1);
/* Generate the FIP file. */ /* Generate the FIP file. */
fp = fopen(filename, "wb"); fp = fopen(filename, "wb");
...@@ -555,6 +559,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a ...@@ -555,6 +559,13 @@ static int pack_images(const char *filename, uint64_t toc_flags, unsigned long a
xfwrite(image->buffer, image->toc_e.size, fp, filename); xfwrite(image->buffer, image->toc_e.size, fp, filename);
} }
if (fseek(fp, entry_offset, SEEK_SET))
log_errx("Failed to set file position");
pad_size = toc_entry->offset_address - entry_offset;
while (pad_size--)
fputc(0x0, fp);
fclose(fp); fclose(fp);
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment