1 /* 2 * Logging support 3 * 4 * Copyright (c) 2017 Google, Inc 5 * Written by Simon Glass <sjg@chromium.org> 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10 #ifndef __LOG_H 11 #define __LOG_H 12 13 #ifdef DEBUG 14 #define _DEBUG 1 15 #else 16 #define _DEBUG 0 17 #endif 18 19 #ifdef CONFIG_SPL_BUILD 20 #define _SPL_BUILD 1 21 #else 22 #define _SPL_BUILD 0 23 #endif 24 25 /* 26 * Output a debug text when condition "cond" is met. The "cond" should be 27 * computed by a preprocessor in the best case, allowing for the best 28 * optimization. 29 */ 30 #define debug_cond(cond, fmt, args...) \ 31 do { \ 32 if (cond) \ 33 printf(pr_fmt(fmt), ##args); \ 34 } while (0) 35 36 /* Show a message if DEBUG is defined in a file */ 37 #define debug(fmt, args...) \ 38 debug_cond(_DEBUG, fmt, ##args) 39 40 /* Show a message if not in SPL */ 41 #define warn_non_spl(fmt, args...) \ 42 debug_cond(!_SPL_BUILD, fmt, ##args) 43 44 /* 45 * An assertion is run-time check done in debug mode only. If DEBUG is not 46 * defined then it is skipped. If DEBUG is defined and the assertion fails, 47 * then it calls panic*( which may or may not reset/halt U-Boot (see 48 * CONFIG_PANIC_HANG), It is hoped that all failing assertions are found 49 * before release, and after release it is hoped that they don't matter. But 50 * in any case these failing assertions cannot be fixed with a reset (which 51 * may just do the same assertion again). 52 */ 53 void __assert_fail(const char *assertion, const char *file, unsigned int line, 54 const char *function); 55 #define assert(x) \ 56 ({ if (!(x) && _DEBUG) \ 57 __assert_fail(#x, __FILE__, __LINE__, __func__); }) 58 59 #endif 60