summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2020-11-21 14:54:13 -0800
committerFurquan Shaikh <furquan@google.com>2020-12-08 18:59:05 +0000
commit73982edadd83319339839fec026d29abd24034de (patch)
tree0dc1749aeed5af00af71d5d294ad370f34162bfb /util
parent0ae389cb237333bd7601952eef84e87075c77b76 (diff)
util/cbfstool/fmaptool: Generate list of terminal sections
This change adds support in fmaptool to generate a macro in C header file that provides a list of section names that do not have any subsections. This is useful for performing build time tests on these sections. BUG=b:171534504 Change-Id: Ie32bb8af4a722d329f9d4729722b131ca352d47a Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/47883 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Diffstat (limited to 'util')
-rw-r--r--util/cbfstool/fmaptool.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/util/cbfstool/fmaptool.c b/util/cbfstool/fmaptool.c
index 9f5803d8ee..4ba5967b84 100644
--- a/util/cbfstool/fmaptool.c
+++ b/util/cbfstool/fmaptool.c
@@ -14,6 +14,12 @@
#define HEADER_FMAP_OFFSET "FMAP_OFFSET"
#define HEADER_FMAP_SIZE "FMAP_SIZE"
+/*
+ * Macro name used in the generated C header file to provide list of section names that do not
+ * have any sub-sections.
+ */
+#define HEADER_FMAP_TERMINAL_SECTIONS "FMAP_TERMINAL_SECTIONS"
+
enum fmaptool_return {
FMAPTOOL_EXIT_SUCCESS = 0,
FMAPTOOL_EXIT_BAD_ARGS,
@@ -71,6 +77,20 @@ static void list_cbfs_section_names(FILE *out)
fputc('\n', out);
}
+static void write_header_fmap_terminal_section_names(FILE *header,
+ const struct flashmap_descriptor *root)
+{
+ assert(root);
+
+ if (root->list_len == 0) {
+ fprintf(header, "%s ", root->name);
+ return;
+ }
+
+ fmd_foreach_child(child, root)
+ write_header_fmap_terminal_section_names(header, child);
+}
+
static void write_header_fmap_sections(FILE *header, const struct flashmap_descriptor *root,
unsigned int offset)
{
@@ -116,6 +136,10 @@ static bool write_header(const char *out_fname,
fprintf(header, "#define %s %#x\n", HEADER_FMAP_OFFSET, fmap_offset);
fprintf(header, "#define %s %#x\n\n", HEADER_FMAP_SIZE, fmap_size);
+ fprintf(header, "#define %s \"", HEADER_FMAP_TERMINAL_SECTIONS);
+ write_header_fmap_terminal_section_names(header, root);
+ fprintf(header, "\"\n\n");
+
write_header_fmap_sections(header, root, 0);
fputs("\n", header);