Comments

assert() is like BUG_ON() but compiles to nothing unless DEBUG is defined.
This is useful when a condition is an error but a board reset is unlikely
to fix it, so it is better to soldier on in hope. Assertion failures should
be caught during development/test.
It turns out that assert() is defined separately in a few places in U-Boot
with various meanings. This patch cleans up some of these.
Build errors exposed by this change (and defining DEBUG) are also fixed in
this patch.
Signed-off-by: Simon Glass <sjg@chromium.org>
---
V2:
* Changed macros so that all code is compiled even if DEBUG is disabled
---
common/dlmalloc.c | 7 -------
include/common.h | 19 +++++++++++++++++++
include/malloc.h | 8 --------
lib/qsort.c | 5 -----
4 files changed, 19 insertions(+), 20 deletions(-)

Dear Simon Glass,
In message <1308870873-32540-1-git-send-email-sjg@chromium.org> you wrote:
> assert() is like BUG_ON() but compiles to nothing unless DEBUG is defined.> This is useful when a condition is an error but a board reset is unlikely> to fix it, so it is better to soldier on in hope. Assertion failures should> be caught during development/test.> > It turns out that assert() is defined separately in a few places in U-Boot> with various meanings. This patch cleans up some of these.> > Build errors exposed by this change (and defining DEBUG) are also fixed in> this patch.> > Signed-off-by: Simon Glass <sjg@chromium.org>> ---> V2:> * Changed macros so that all code is compiled even if DEBUG is disabled
...
> +#define assert(x) \> + ({ if (!(x) && _DEBUG) \> + printf("Assertion failure '%s' %s line %d\n", \> + #x, __FILE__, __LINE__); })
Can we please use the same message format as used by assert(3) ?
Afaict they use "%s%s%s:%u: %s%sAssertion `%s' failed.".
Also, to save on memory footprint (frequent repetition of the common
string "Assertion failed") we should probably provide a separate
function for this (cf. /usr/include/assert.h).
Finally, should the assert() not result in some termination or hang of
U-Boot, like assert(3) is doing?
Best regards,
Wolfgang Denk

Hi Wolfgang,
On Thu, Jun 23, 2011 at 10:33 PM, Wolfgang Denk <wd@denx.de> wrote:
> Dear Simon Glass,
...
>> +#define assert(x) \>> + ({ if (!(x) && _DEBUG) \>> + printf("Assertion failure '%s' %s line %d\n", \>> + #x, __FILE__, __LINE__); })>> Can we please use the same message format as used by assert(3) ?> Afaict they use "%s%s%s:%u: %s%sAssertion `%s' failed.".
Yes, will do.
>> Also, to save on memory footprint (frequent repetition of the common> string "Assertion failed") we should probably provide a separate> function for this (cf. /usr/include/assert.h).
Good idea will do.
>> Finally, should the assert() not result in some termination or hang of> U-Boot, like assert(3) is doing?
I'm happy either way so long as it prints a message. A hang is better
than a reboot for those with ICE units, etc. My intention was that it
would simply print the message and try to continue (since we can't
really 'terminate' U-Boot, and it continues with DEBUG not defined).
But I am happy either way, so let me know if you would like it to hang.
Regards,
Simon
>> Best regards,>> Wolfgang Denk>> --> DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de> "What the scientists have in their briefcases is terrifying."> - Nikita Khrushchev>

On Fri, Jun 24, 2011 at 14:13, Simon Glass wrote:
> On Thu, Jun 23, 2011 at 10:33 PM, Wolfgang Denk wrote:>> Finally, should the assert() not result in some termination or hang of>> U-Boot, like assert(3) is doing?>> I'm happy either way so long as it prints a message. A hang is better> than a reboot for those with ICE units, etc. My intention was that it> would simply print the message and try to continue (since we can't> really 'terminate' U-Boot, and it continues with DEBUG not defined).
use panic() instead of printf() and then the hang-vs-reset issue is
made into a board-config issue (CONFIG_PANIC_HANG)
-mike