diff options
author | Nico Huber <nico.huber@secunet.com> | 2016-10-07 12:58:17 +0200 |
---|---|---|
committer | Nico Huber <nico.h@gmx.de> | 2016-11-06 17:28:13 +0100 |
commit | e0ed9025cf7453212e5e5a845e34e0b7ecfa3eb9 (patch) | |
tree | 0e904b2c054723cae2760e8778998f0a93851f1c /src/lib | |
parent | 85a80ef4726a0f088d7d2007553349b861908386 (diff) | |
download | coreboot-e0ed9025cf7453212e5e5a845e34e0b7ecfa3eb9.tar.xz |
Add option to use Ada code in ramstage
If selected, libgnat will be linked into ramstage. And, to support Ada
package intializations, we have to call ramstage_adainit().
Change-Id: I11417db21f16bf3007739a097d63fd592344bce3
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/16944
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/gnat/Makefile.inc | 4 | ||||
-rw-r--r-- | src/lib/hardwaremain.c | 13 |
2 files changed, 17 insertions, 0 deletions
diff --git a/src/lib/gnat/Makefile.inc b/src/lib/gnat/Makefile.inc index 6ba274a7ef..394c838842 100644 --- a/src/lib/gnat/Makefile.inc +++ b/src/lib/gnat/Makefile.inc @@ -60,3 +60,7 @@ $(foreach arch,$(standard-archs), \ $(foreach arch,$(standard-archs), \ $(eval $(call libgnat-template,$(arch)))) + +ifeq ($(CONFIG_RAMSTAGE_ADA),y) +ramstage-libs += $$(obj)/libgnat-$(ARCH-ramstage-y)/libgnat.a +endif diff --git a/src/lib/hardwaremain.c b/src/lib/hardwaremain.c index ab4d9f48e2..ef789601e6 100644 --- a/src/lib/hardwaremain.c +++ b/src/lib/hardwaremain.c @@ -18,6 +18,7 @@ * C Bootstrap code for the coreboot */ +#include <adainit.h> #include <arch/exception.h> #include <bootstate.h> #include <console/console.h> @@ -429,6 +430,18 @@ static void boot_state_schedule_static_entries(void) void main(void) { + /* + * We can generally jump between C and Ada code back and forth + * without trouble. But since we don't have an Ada main() we + * have to do some Ada package initializations that GNAT would + * do there. This has to be done before calling any Ada code. + * + * The package initializations should not have any dependen- + * cies on C code. So we can call them here early, and don't + * have to worry at which point we can start to use Ada. + */ + ramstage_adainit(); + /* TODO: Understand why this is here and move to arch/platform code. */ /* For MMIO UART this needs to be called before any other printk. */ if (IS_ENABLED(CONFIG_ARCH_X86)) |