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>
This commit is contained in:
Furquan Shaikh 2020-11-21 14:54:13 -08:00
parent 0ae389cb23
commit 73982edadd
1 changed files with 24 additions and 0 deletions

View File

@ -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);