diff options
author | Jeremy Compostella <jeremy.compostella@intel.com> | 2022-11-30 19:26:01 -0700 |
---|---|---|
committer | Martin L Roth <gaumless@gmail.com> | 2022-12-17 20:48:06 +0000 |
commit | fa83887e48f196cfa303ce6de32acf1dfec7cad9 (patch) | |
tree | 1eb1a776d3e3e02c182db936dc9e6ad38529bf9b /src/cpu | |
parent | e6b96dceabb9cc4e79653c7992b8c16ac3d234ce (diff) |
Add option to use Ada code in romstage
If selected, libgnat is linked into romstage. In addition, a call to
romstage_adainit() is added to support Ada program data
initialization.
BUG=b:252792591
BRANCH=firmware-brya-14505.B
TEST=Ada code compiles for romstage and loads successfully
Change-Id: I74f0460f6b14fde2b4bd6391e1782b2e5b217707
Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/70274
Reviewed-by: Tarun Tuli <taruntuli@google.com>
Reviewed-by: Nick Vaccaro <nvaccaro@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/intel/car/romstage.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/cpu/intel/car/romstage.c b/src/cpu/intel/car/romstage.c index c7c218b8ed..7df512dce0 100644 --- a/src/cpu/intel/car/romstage.c +++ b/src/cpu/intel/car/romstage.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +#include <adainit.h> #include <arch/romstage.h> #include <arch/symbols.h> #include <commonlib/helpers.h> @@ -40,6 +41,18 @@ void __noreturn romstage_main(void) if (CONFIG(VBOOT_EARLY_EC_SYNC)) vboot_sync_ec(); + /* + * 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. + */ + romstage_adainit(); + mainboard_romstage_entry(); /* Check the stack. */ |