Hi, I rewrote the ASSERT() and BUG() implementations (src/include/assert.h) from scratch. The old one used different messages for preram and ram stages and would not print any warnings if CONFIG_DEBUG was disabled. In the case of CONFIG_DEBUG the code would die().
I wonder if that's the behavior we want. If something is bad enough to stop a system during development, maybe the warning should not be ignored completely when it happens in a productive system? I think we should always print a warning if the code is inconsistent. Also, do we want to die() on an assert? I believe in most cases we don't.The worst case that happens when we run into a bug or assert situation is that we can not boot the system. But in some cases it's not that bad.. like in the mptable / acpi generator or some IOAPIC and SuperIO drivers. We might still be able to boot into a system and flash a new, fixed coreboot image, but in case of a die() we desperately brick the system. I think we should not do that. What do you think? Stefan -- coresystems GmbH . Brahmsstr. 16 . D-79104 Freiburg i. Br. Tel.: +49 761 7668825 . Fax: +49 761 7664613 Email: i...@coresystems.de . http://www.coresystems.de/ Registergericht: Amtsgericht Freiburg . HRB 7656 Geschäftsführer: Stefan Reinauer . Ust-IdNr.: DE245674866
/* * This file is part of the coreboot project. * * Copyright (C) 2010 coresystems GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; version 2 of * the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, * MA 02110-1301 USA */ #ifndef __ASSERT_H__ #define __ASSERT_H__ #if defined(__PRE_RAM__) && !CONFIG_USE_PRINTK_IN_CAR /* ROMCC versions */ #define ASSERT(x) { \ if(!(x)) { \ print_emerg("ASSERTION FAILED: file '"); \ print_emerg(__FILE__); \ print_emerg("', line 0x"); \ print_debug_hex32(__LINE__); \ print_emerg("\r\n"); \ //die(""); \ } \ } #define BUG() { \ print_emerg("BUG ENCOUNTERED: SYSTEM HALTED at file '");\ print_emerg(__FILE__); \ print_emerg("', line 0x"); \ print_debug_hex32(__LINE__); \ print_emerg("\r\n"); \ //die(""); \ } #else /* GCC and CAR versions */ #define ASSERT(x) { \ if (!(x)) { \ printk_emerg("ASSERTION FAILED: file '%s', " \ " line %d\n", __FILE__, __LINE__); \ die(""); \ } \ } #define BUG() { \ printk_emerg("BUG ENCOUNTERED: SYSTEM HALTED at file '%s', " \ " line %d\n", __FILE__, __LINE__); \ die(""); \ } #endif #endif // __ASSERT_H__
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot