[coreboot-gerrit] Change in coreboot[master]: util/cbfstool: strip unused data at the end of Tianocore FVs

Patrick Georgi (Code Review) gerrit at coreboot.org
Wed Jul 5 13:49:24 CEST 2017


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 at 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 */

-- 
To view, visit https://review.coreboot.org/20470
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6f128eca10bd56f5a0eb1302903de4a4c78aa568
Gerrit-Change-Number: 20470
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Georgi <pgeorgi at google.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20170705/3f352244/attachment.html>


More information about the coreboot-gerrit mailing list