[coreboot] New patch to review for coreboot: 0419e53 rmodule: add bss clearing option to API

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Tue Mar 19 01:58:53 CET 2013

Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2787


commit 0419e53ce6e0d08e34559ea70f5c85001b5ad400
Author: Aaron Durbin <adurbin at chromium.org>
Date:   Thu Feb 7 02:13:50 2013 -0600

    rmodule: add bss clearing option to API
    There are circumstances where the loader should not clear the bss. For
    example, the ramstage clears its own bss. There is no sense in clearing
    the bss twice. Therefore, allow the loader to optionally clear the bss
    by adding a function that does not clear the bss.
    Change-Id: Ic0a3f439b6289c680d3c3afc17e866d935c9f29f
    Signed-off-by: Aaron Durbin <adurbin at chromium.org>
 src/include/rmodule.h |  1 +
 src/lib/rmodule.c     | 14 ++++++++++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/include/rmodule.h b/src/include/rmodule.h
index 5300c63..89310c9 100644
--- a/src/include/rmodule.h
+++ b/src/include/rmodule.h
@@ -39,6 +39,7 @@ void *rmodule_entry(const struct rmodule *m);
 int rmodule_entry_offset(const struct rmodule *m);
 int rmodule_memory_size(const struct rmodule *m);
 int rmodule_load(void *loc, struct rmodule *m);
+int rmodule_load_no_clear_bss(void *base, struct rmodule *m);
 int rmodule_load_alignment(const struct rmodule *m);
 #define FIELD_ENTRY(x_) ((u32)&x_)
diff --git a/src/lib/rmodule.c b/src/lib/rmodule.c
index 56d7c6d..6da7a6e 100644
--- a/src/lib/rmodule.c
+++ b/src/lib/rmodule.c
@@ -228,7 +228,7 @@ int rmodule_load_alignment(const struct rmodule *module)
 	return module->header->module_link_start_address;
-int rmodule_load(void *base, struct rmodule *module)
+static int __rmodule_load(void *base, struct rmodule *module, int clear_bss)
 	 * In order to load the module at a given address, the following steps
@@ -239,7 +239,17 @@ int rmodule_load(void *base, struct rmodule *module)
 	module->location = base;
-	rmodule_clear_bss(module);
+	if (clear_bss)
+		rmodule_clear_bss(module);
 	return rmodule_relocate(module);
+int rmodule_load(void *base, struct rmodule *module)
+	return __rmodule_load(base, module, 1);
+int rmodule_load_no_clear_bss(void *base, struct rmodule *module)
+	return __rmodule_load(base, module, 0);

More information about the coreboot mailing list