[coreboot-gerrit] New patch to review for coreboot: 483d9f5 Fix non-x86 __PRE_RAM__ assertions and add FATAL_ASSERTS Kconfig option

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Thu Apr 16 17:12:43 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/9775

-gerrit

commit 483d9f5edc1337f62d1003eb92f57381974af266
Author: Julius Werner <jwerner at chromium.org>
Date:   Tue Feb 17 17:27:23 2015 -0800

    Fix non-x86 __PRE_RAM__ assertions and add FATAL_ASSERTS Kconfig option
    
    This patch fixes a bug that caused non-x86 boards to use the poor man's
    assert() version with a lot more instructions per invocation and
    hexadecimal line numbers in __PRE_RAM__ environments. This was really
    just an oversight in the ARM port... even x86 uses a proper printk() in
    most cases (those with CAR) and there's no reason not to do so on the
    generally even more flexible SRAM-based architectures.
    
    Additionally, it adds a new Kconfig option to make failed assertions and
    BUG() calls halt again. This seems to have been the original intention,
    but was commented out once out of fear that this might prevent
    production systems from booting. It is still a useful debugging feature
    though (since otherwise assertions can easily just scroll past and get
    overlooked), so the user should be able to decide the this based on his
    needs.
    
    (Also changed error messages for both to include the word "ERROR", since
    grepping for that is the most sophisticated way we currently have to
    detect firmware problems. Some automated Chromium OS suspend tests check
    for that.)
    
    BRANCH=veyron
    BUG=None
    TEST=Booted Jerry. Compared binary sizes before and after, new version's
    bootblock is some ~600 bytes smaller.
    
    Change-Id: I894da18d77e12bf104e443322e2d58e60564e4b7
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: 6a5343124719c18a1c969477e3d18bda13c0bf26
    Original-Change-Id: I0268cfd67d8c894406b18bb3759a577944bcffb1
    Original-Signed-off-by: Julius Werner <jwerner at chromium.org>
    Original-Reviewed-on: https://chromium-review.googlesource.com/250661
    Original-Reviewed-by: Vadim Bendebury <vbendeb at chromium.org>
    Original-Reviewed-by: Aaron Durbin <adurbin at chromium.org>
---
 src/Kconfig          |  6 ++++++
 src/include/assert.h | 13 +++++++------
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/src/Kconfig b/src/Kconfig
index 6f7f459..a6032c7 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -808,6 +808,12 @@ config GDB_WAIT
 	help
 	  If enabled, coreboot will wait for a GDB connection.
 
+config FATAL_ASSERTS
+	bool "Halt when hitting a BUG() or assertion error"
+	default n
+	help
+	  If enabled, coreboot will call hlt() on a BUG() or failed ASSERT().
+
 config DEBUG_CBFS
 	bool "Output verbose CBFS debug messages"
 	default n
diff --git a/src/include/assert.h b/src/include/assert.h
index 966449b..669f8e5 100644
--- a/src/include/assert.h
+++ b/src/include/assert.h
@@ -20,20 +20,21 @@
 #ifndef __ASSERT_H__
 #define __ASSERT_H__
 
+#include <arch/hlt.h>
 #include <console/console.h>
 
 /* GCC and CAR versions */
 #define ASSERT(x) {						\
 	if (!(x)) {						\
-		printk(BIOS_EMERG, "ASSERTION FAILED: file '%s', "	\
-			" line %d\n", __FILE__, __LINE__);	\
-		/* die(""); */					\
+		printk(BIOS_EMERG, "ASSERTION ERROR: file '%s'"	\
+			", line %d\n", __FILE__, __LINE__);	\
+		if (IS_ENABLED(CONFIG_FATAL_ASSERTS)) hlt();	\
 	}							\
 }
 #define BUG() {							\
-	printk(BIOS_EMERG, "BUG ENCOUNTERED: SYSTEM HALTED at file '%s', "	\
-		" line %d\n", __FILE__, __LINE__);		\
-	/* die(""); */						\
+	printk(BIOS_EMERG, "ERROR: BUG ENCOUNTERED at file '%s'"\
+		", line %d\n", __FILE__, __LINE__);		\
+	if (IS_ENABLED(CONFIG_FATAL_ASSERTS)) hlt();		\
 }
 
 #define assert(statement)	ASSERT(statement)



More information about the coreboot-gerrit mailing list