diff options
author | Simon Glass <sjg@chromium.org> | 2017-12-04 13:48:20 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-12-07 15:17:00 -0500 |
commit | 0e98b0a65092d6573eb17d07e04455f9cf545b21 (patch) | |
tree | cfbbd2540833fdf5e7b6e6ca78872aae5cc13ad1 /include/log.h | |
parent | 64e9b4f346f113dec984eaab226a44d35e38d7ce (diff) | |
download | u-boot-0e98b0a65092d6573eb17d07e04455f9cf545b21.tar.gz |
Move debug and logging support to a separate header
Before adding new features, move these definitions to a separate header
to avoid further cluttering common.h.
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Diffstat (limited to 'include/log.h')
-rw-r--r-- | include/log.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/include/log.h b/include/log.h new file mode 100644 index 0000000000..08ad44cf49 --- /dev/null +++ b/include/log.h @@ -0,0 +1,59 @@ +/* + * Logging support + * + * Copyright (c) 2017 Google, Inc + * Written by Simon Glass <sjg@chromium.org> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef __LOG_H +#define __LOG_H + +#ifdef DEBUG +#define _DEBUG 1 +#else +#define _DEBUG 0 +#endif + +#ifdef CONFIG_SPL_BUILD +#define _SPL_BUILD 1 +#else +#define _SPL_BUILD 0 +#endif + +/* + * Output a debug text when condition "cond" is met. The "cond" should be + * computed by a preprocessor in the best case, allowing for the best + * optimization. + */ +#define debug_cond(cond, fmt, args...) \ + do { \ + if (cond) \ + printf(pr_fmt(fmt), ##args); \ + } while (0) + +/* Show a message if DEBUG is defined in a file */ +#define debug(fmt, args...) \ + debug_cond(_DEBUG, fmt, ##args) + +/* Show a message if not in SPL */ +#define warn_non_spl(fmt, args...) \ + debug_cond(!_SPL_BUILD, fmt, ##args) + +/* + * An assertion is run-time check done in debug mode only. If DEBUG is not + * defined then it is skipped. If DEBUG is defined and the assertion fails, + * then it calls panic*( which may or may not reset/halt U-Boot (see + * CONFIG_PANIC_HANG), It is hoped that all failing assertions are found + * before release, and after release it is hoped that they don't matter. But + * in any case these failing assertions cannot be fixed with a reset (which + * may just do the same assertion again). + */ +void __assert_fail(const char *assertion, const char *file, unsigned int line, + const char *function); +#define assert(x) \ + ({ if (!(x) && _DEBUG) \ + __assert_fail(#x, __FILE__, __LINE__, __func__); }) + +#endif |