Patrick Georgi has uploaded this change for review. ( https://review.coreboot.org/20470
Change subject: util/cbfstool: strip unused data at the end of Tianocore FVs ......................................................................
util/cbfstool: strip unused data at the end of Tianocore FVs
There's no need to compress endless streaks of 0xff. It compresses to basically nothing, but it still takes time to process.
Change-Id: I6f128eca10bd56f5a0eb1302903de4a4c78aa568 Signed-off-by: Patrick Georgi pgeorgi@google.com --- M util/cbfstool/cbfs-mkpayload.c 1 file changed, 12 insertions(+), 6 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/70/20470/1
diff --git a/util/cbfstool/cbfs-mkpayload.c b/util/cbfstool/cbfs-mkpayload.c index fd2c4ca..87d3406 100644 --- a/util/cbfstool/cbfs-mkpayload.c +++ b/util/cbfstool/cbfs-mkpayload.c @@ -382,7 +382,13 @@ return -1; }
- if (buffer_create(output, (sizeof(segs) + input->size), + uint32_t end = input->size; + while (--end != 0) { + if (((uint8_t *)input->data)[end] != 0xff) + break; + } + + if (buffer_create(output, (sizeof(segs) + end), input->name) != 0) return -1;
@@ -393,19 +399,19 @@ /* Prepare code segment */ segs[0].type = PAYLOAD_SEGMENT_CODE; segs[0].load_addr = loadaddress; - segs[0].mem_len = input->size; + segs[0].mem_len = end; segs[0].offset = doffset;
- if (!compress(input->data, input->size, output->data + doffset, &len) && - (unsigned int)len < input->size) { + if (!compress(input->data, end, output->data + doffset, &len) && + (unsigned int)len < end) { segs[0].compression = algo; segs[0].len = len; } else { WARN("Compression failed or would make the data bigger " "- disabled.\n"); segs[0].compression = 0; - segs[0].len = input->size; - memcpy(output->data + doffset, input->data, input->size); + segs[0].len = end; + memcpy(output->data + doffset, input->data, end); }
/* prepare entry point segment */