rmodtool: make rmodule parameter section optional
There are currently 2 uses for rmodule programs: stand alone
programs that are separate from the coreboot stages and a
relocatable ramstage. For the ramstage usage there's no reason
to require a rmodule parameter section. Therefore make this
optional.
BUG=chrome-os-partner:44827
BRANCH=None
TEST=Built ramstage w/ normal linking (w/o a rmodule parameter
section). No error.
Change-Id: I5f8a415e86510be9409a28068e3d3a4d0ba8733e
Signed-off-by: Aaron Durbin <adubin@chromium.org>
Reviewed-on: http://review.coreboot.org/11523
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
diff --git a/util/cbfstool/rmodule.c b/util/cbfstool/rmodule.c
index c35eff7..1f41d17 100644
--- a/util/cbfstool/rmodule.c
+++ b/util/cbfstool/rmodule.c
@@ -344,7 +344,7 @@
static int
populate_sym(struct rmod_context *ctx, const char *sym_name, Elf64_Addr *addr,
- int nsyms, const char *strtab)
+ int nsyms, const char *strtab, int optional)
{
int i;
Elf64_Sym *syms;
@@ -360,6 +360,13 @@
*addr = syms[i].st_value;
return 0;
}
+
+ if (optional) {
+ DEBUG("optional symbol '%s' not found.\n", sym_name);
+ *addr = 0;
+ return 0;
+ }
+
ERROR("symbol '%s' not found.\n", sym_name);
return -1;
}
@@ -403,17 +410,17 @@
}
if (populate_sym(ctx, "_rmodule_params", &ctx->parameters_begin,
- nsyms, strtab))
+ nsyms, strtab, 1))
return -1;
if (populate_sym(ctx, "_ermodule_params", &ctx->parameters_end,
- nsyms, strtab))
+ nsyms, strtab, 1))
return -1;
- if (populate_sym(ctx, "_bss", &ctx->bss_begin, nsyms, strtab))
+ if (populate_sym(ctx, "_bss", &ctx->bss_begin, nsyms, strtab, 0))
return -1;
- if (populate_sym(ctx, "_ebss", &ctx->bss_end, nsyms, strtab))
+ if (populate_sym(ctx, "_ebss", &ctx->bss_end, nsyms, strtab, 0))
return -1;
/* Honor the entry point within the ELF header. */