[coreboot-gerrit] Change in coreboot[master]: cbfstool: Add '-p' option to specify the order

Daisuke Nojiri (Code Review) gerrit at coreboot.org
Tue Oct 31 01:45:44 CET 2017


Daisuke Nojiri has uploaded this change for review. ( https://review.coreboot.org/22239


Change subject: cbfstool: Add '-p' option to specify the order
......................................................................

cbfstool: Add '-p' option to specify the order

This patch adds '-p' to the 'add' command. It allows the add
command to specify the file after which the new file will be
added. This is useful to create a padding for a file which might
be replaced with a larger file.

BUG=b:68660966
BRANCH=none
TEST=emerge-fizz coreboot && cbfstool image.bin print -r FW_MAIN_A
prints ecrw.pad after ecrw.

Change-Id: I64bc54fd10a453b4da467bc69d9590e61b0f7ead
Signed-off-by: Daisuke Nojiri <dnojiri at chromium.org>
---
M util/cbfstool/cbfs_image.c
M util/cbfstool/cbfs_image.h
M util/cbfstool/cbfstool.c
3 files changed, 23 insertions(+), 7 deletions(-)



  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/39/22239/1

diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index 306fc29..f3398cc 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -734,7 +734,7 @@
 
 int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
 		   uint32_t content_offset,
-		   struct cbfs_file *header)
+		   struct cbfs_file *header, const char *after)
 {
 	assert(image);
 	assert(buffer);
@@ -760,7 +760,13 @@
 	for (entry = cbfs_find_first_entry(image);
 	     entry && cbfs_is_valid_entry(image, entry);
 	     entry = cbfs_find_next_entry(image, entry)) {
-
+		if (after) {
+			if (strcasecmp(entry->filename, after))
+				continue;
+			entry = cbfs_find_next_entry(image, entry);
+			if (!entry || !cbfs_is_valid_entry(image, entry))
+				break;
+		}
 		entry_type = ntohl(entry->type);
 		if (entry_type != CBFS_COMPONENT_NULL)
 			continue;
diff --git a/util/cbfstool/cbfs_image.h b/util/cbfstool/cbfs_image.h
index 5772b1b..e6c3814 100644
--- a/util/cbfstool/cbfs_image.h
+++ b/util/cbfstool/cbfs_image.h
@@ -105,7 +105,8 @@
  * Never pass this function a top-aligned address: convert it to an offset.
  * Returns 0 on success, otherwise non-zero. */
 int cbfs_add_entry(struct cbfs_image *image, struct buffer *buffer,
-		   uint32_t content_offset, struct cbfs_file *header);
+		   uint32_t content_offset, struct cbfs_file *header,
+		   const char *after);
 
 /* Removes an entry from CBFS image. Returns 0 on success, otherwise non-zero. */
 int cbfs_remove_entry(struct cbfs_image *image, const char *name);
diff --git a/util/cbfstool/cbfstool.c b/util/cbfstool/cbfstool.c
index 3263a91..c25d1f4 100644
--- a/util/cbfstool/cbfstool.c
+++ b/util/cbfstool/cbfstool.c
@@ -52,6 +52,7 @@
 	struct buffer *image_region;
 	const char *name;
 	const char *filename;
+	const char *after;
 	const char *fmap;
 	const char *region_name;
 	const char *source_region;
@@ -239,7 +240,7 @@
 
 	header = cbfs_create_file_header(CBFS_COMPONENT_RAW,
 		buffer.size, name);
-	if (cbfs_add_entry(&image, &buffer, offset, header) != 0) {
+	if (cbfs_add_entry(&image, &buffer, offset, header, NULL) != 0) {
 		ERROR("Failed to add %llu into ROM image as '%s'.\n",
 					(long long unsigned)u64val, name);
 		goto done;
@@ -303,7 +304,7 @@
 
 	header = cbfs_create_file_header(CBFS_COMPONENT_CBFSHEADER,
 		buffer_size(&buffer), name);
-	if (cbfs_add_entry(&image, &buffer, 0, header) != 0) {
+	if (cbfs_add_entry(&image, &buffer, 0, header, NULL) != 0) {
 		ERROR("Failed to add cbfs master header into ROM image.\n");
 		goto done;
 	}
@@ -333,6 +334,7 @@
 
 static int cbfs_add_component(const char *filename,
 			      const char *name,
+			      const char *after,
 			      uint32_t type,
 			      uint32_t offset,
 			      uint32_t headeroffset,
@@ -425,7 +427,7 @@
 		offset = convert_to_from_top_aligned(param.image_region,
 								-offset);
 
-	if (cbfs_add_entry(&image, &buffer, offset, header) != 0) {
+	if (cbfs_add_entry(&image, &buffer, offset, header, after) != 0) {
 		ERROR("Failed to add '%s' into ROM image.\n", filename);
 		free(header);
 		buffer_delete(&buffer);
@@ -678,6 +680,7 @@
 
 	return cbfs_add_component(param.filename,
 				  param.name,
+				  param.after,
 				  param.type,
 				  local_baseaddress,
 				  param.headeroffset,
@@ -700,6 +703,7 @@
 
 	return cbfs_add_component(param.filename,
 				  param.name,
+				  param.after,
 				  CBFS_COMPONENT_STAGE,
 				  param.baseaddress,
 				  param.headeroffset,
@@ -710,6 +714,7 @@
 {
 	return cbfs_add_component(param.filename,
 				  param.name,
+				  param.after,
 				  CBFS_COMPONENT_PAYLOAD,
 				  param.baseaddress,
 				  param.headeroffset,
@@ -730,6 +735,7 @@
 	}
 	return cbfs_add_component(param.filename,
 				  param.name,
+				  param.after,
 				  CBFS_COMPONENT_PAYLOAD,
 				  param.baseaddress,
 				  param.headeroffset,
@@ -1139,7 +1145,7 @@
 }
 
 static const struct command commands[] = {
-	{"add", "H:r:f:n:t:c:b:a:yvA:gh?", cbfs_add, true, true},
+	{"add", "H:r:f:n:t:c:b:a:p:yvA:gh?", cbfs_add, true, true},
 	{"add-flat-binary", "H:r:f:n:l:e:c:b:vA:gh?", cbfs_add_flat_binary,
 				true, true},
 	{"add-payload", "H:r:f:n:t:c:b:C:I:vA:gh?", cbfs_add_payload,
@@ -1505,6 +1511,9 @@
 					return 1;
 				}
 				break;
+			case 'p':
+				param.after = optarg;
+				break;
 			case 'P':
 				param.pagesize = strtoul(optarg, &suffix, 0);
 				if (!*optarg || (suffix && *suffix)) {

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

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I64bc54fd10a453b4da467bc69d9590e61b0f7ead
Gerrit-Change-Number: 22239
Gerrit-PatchSet: 1
Gerrit-Owner: Daisuke Nojiri <dnojiri at chromium.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.coreboot.org/pipermail/coreboot-gerrit/attachments/20171031/7c99d488/attachment.html>


More information about the coreboot-gerrit mailing list