diff options
author | davidcunado-arm <david.cunado@arm.com> | 2017-05-19 10:54:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-19 10:54:23 +0100 |
commit | 727a68b8ef02f48316ef13903a63af2638f6bbd3 (patch) | |
tree | 733f8c8a8d13e6a0eb9c2a3c781c4bc079fe402f | |
parent | 4fd4af26cb650d34876c058a7142c91233ba5475 (diff) | |
parent | 0da2fe7e29380f1b45286ae8a5a999547d250d33 (diff) |
Merge pull request #936 from antonio-nino-diaz-arm/an/assert-mem
Simplify assert() to reduce memory usage
-rw-r--r-- | docs/porting-guide.md | 11 | ||||
-rw-r--r-- | include/lib/stdlib/assert.h | 23 | ||||
-rw-r--r-- | lib/stdlib/assert.c | 33 |
3 files changed, 53 insertions, 14 deletions
diff --git a/docs/porting-guide.md b/docs/porting-guide.md index 0189ec40..4d7a5ead 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -535,6 +535,17 @@ optionally be defined: PLAT_PARTITION_MAX_ENTRIES := 12 $(eval $(call add_define,PLAT_PARTITION_MAX_ENTRIES)) +The following constant is optional. It should be defined to override the default +behaviour of the `assert()` function (for example, to save memory). + +* **PLAT_LOG_LEVEL_ASSERT** + If `PLAT_LOG_LEVEL_ASSERT` is higher or equal than `LOG_LEVEL_VERBOSE`, + `assert()` prints the name of the file, the line number and the asserted + expression. Else if it is higher than `LOG_LEVEL_INFO`, it prints the file + name and the line number. Else if it is lower than `LOG_LEVEL_INFO`, it + doesn't print anything to the console. If `PLAT_LOG_LEVEL_ASSERT` isn't + defined, it defaults to `LOG_LEVEL`. + ### File : plat_macros.S [mandatory] diff --git a/include/lib/stdlib/assert.h b/include/lib/stdlib/assert.h index 1bcd1ead..db567dbb 100644 --- a/include/lib/stdlib/assert.h +++ b/include/lib/stdlib/assert.h @@ -42,19 +42,36 @@ #ifndef _ASSERT_H_ #define _ASSERT_H_ +#include <debug.h> +#include <platform_def.h> #include <sys/cdefs.h> +#ifndef PLAT_LOG_LEVEL_ASSERT +#define PLAT_LOG_LEVEL_ASSERT LOG_LEVEL +#endif + #if ENABLE_ASSERTIONS #define _assert(e) assert(e) -#define assert(e) ((e) ? (void)0 : __assert(__func__, __FILE__, \ - __LINE__, #e)) +# if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE +# define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__, #e)) +# elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO +# define assert(e) ((e) ? (void)0 : __assert(__FILE__, __LINE__)) +# else +# define assert(e) ((e) ? (void)0 : __assert()) +# endif #else #define assert(e) ((void)0) #define _assert(e) ((void)0) #endif /* ENABLE_ASSERTIONS */ __BEGIN_DECLS -void __assert(const char *, const char *, int, const char *) __dead2; +#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE +void __assert(const char *, unsigned int, const char *) __dead2; +#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO +void __assert(const char *, unsigned int) __dead2; +#else +void __assert(void) __dead2; +#endif __END_DECLS #endif /* !_ASSERT_H_ */ diff --git a/lib/stdlib/assert.c b/lib/stdlib/assert.c index 5220ad8f..41f70703 100644 --- a/lib/stdlib/assert.c +++ b/lib/stdlib/assert.c @@ -4,22 +4,33 @@ * SPDX-License-Identifier: BSD-3-Clause */ +#include <assert.h> #include <console.h> #include <debug.h> #include <platform.h> -void __assert(const char *function, const char *file, unsigned int line, - const char *assertion) -{ -#if LOG_LEVEL >= LOG_LEVEL_INFO - /* - * Only print the output if LOG_LEVEL is higher or equal to - * LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1. - */ - tf_printf("ASSERT: %s <%d> : %s\n", function, line, assertion); +/* +* Only print the output if PLAT_LOG_LEVEL_ASSERT is higher or equal to +* LOG_LEVEL_INFO, which is the default value for builds with DEBUG=1. +*/ +#if PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_VERBOSE +void __assert(const char *file, unsigned int line, const char *assertion) +{ + tf_printf("ASSERT: %s <%d> : %s\n", file, line, assertion); console_flush(); -#endif - plat_panic_handler(); } +#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO +void __assert(const char *file, unsigned int line) +{ + tf_printf("ASSERT: %s <%d>\n", file, line); + console_flush(); + plat_panic_handler(); +} +#else +void __assert(void) +{ + plat_panic_handler(); +} +#endif |