aboutsummaryrefslogtreecommitdiff
path: root/src/boot/hardwaremain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot/hardwaremain.c')
-rw-r--r--src/boot/hardwaremain.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/boot/hardwaremain.c b/src/boot/hardwaremain.c
index d78b859b62..bb7f264c08 100644
--- a/src/boot/hardwaremain.c
+++ b/src/boot/hardwaremain.c
@@ -35,6 +35,7 @@ it with the version available from LANL.
#include <boot/tables.h>
#include <boot/elf.h>
#include <cbfs.h>
+#include <lib.h>
#if CONFIG_HAVE_ACPI_RESUME
#include <arch/acpi.h>
#endif
@@ -143,7 +144,19 @@ void hardwaremain(int boot_complete)
lb_mem = write_tables();
timestamp_add_now(TS_LOAD_PAYLOAD);
- cbfs_load_payload(lb_mem, CONFIG_CBFS_PREFIX "/payload");
- printk(BIOS_ERR, "Boot failed.\n");
+
+ void *payload;
+ payload = cbfs_load_payload(lb_mem, CONFIG_CBFS_PREFIX "/payload");
+ if (! payload)
+ die("Could not find a payload\n");
+
+ printk(BIOS_DEBUG, "Got a payload\n");
+ /* Before we go off to run the payload, see if
+ * we stayed within our bounds.
+ */
+ checkstack(&_estack, 0);
+
+ selfboot(lb_mem, payload);
+ printk(BIOS_EMERG, "Boot failed");
}