diff options
-rw-r--r-- | util/cbfstool/fmaptool.c | 24 |
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); |