xref: /optee_os/core/include/kernel/panic.h (revision e55ef7c34bb6b61a4ede3164f8bbbd84a0127614)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2b0104773SPascal Brand /*
3b0104773SPascal Brand  * Copyright (c) 2014, STMicroelectronics International N.V.
4b0104773SPascal Brand  */
5b0104773SPascal Brand 
6b0104773SPascal Brand #ifndef KERNEL_PANIC_H
7b0104773SPascal Brand #define KERNEL_PANIC_H
8b0104773SPascal Brand 
9cebdec51SJens Wiklander #include <compiler.h>
10cebdec51SJens Wiklander 
1187a092a7SEtienne Carriere /* debug disabled => __FILE__, ... and panic message are not built. */
123f17b838SEtienne Carriere #if defined(CFG_TEE_CORE_DEBUG)
1387a092a7SEtienne Carriere #define __panic(str)	__do_panic(__FILE__, __LINE__, __func__, str)
1487a092a7SEtienne Carriere #else
15*e55ef7c3SJerome Forissier #define __panic(str)	__do_panic((void *)0, 0, (void *)0, str)
1687a092a7SEtienne Carriere #endif
17b0104773SPascal Brand 
1887a092a7SEtienne Carriere void __do_panic(const char *file, const int line, const char *func,
1987a092a7SEtienne Carriere 		const char *msg) __noreturn;
2087a092a7SEtienne Carriere 
2187a092a7SEtienne Carriere /*
2287a092a7SEtienne Carriere  * Suppress GCC warning on expansion of the panic() macro with no argument:
2387a092a7SEtienne Carriere  *  'ISO C99 requires at least one argument for the "..." in a variadic macro'
2487a092a7SEtienne Carriere  * Occurs when '-pedantic' is combined with '-std=gnu99'.
2587a092a7SEtienne Carriere  * Suppression applies only to this file and the expansion of macros defined in
2687a092a7SEtienne Carriere  * this file.
2787a092a7SEtienne Carriere  */
2887a092a7SEtienne Carriere #pragma GCC system_header
2987a092a7SEtienne Carriere 
3087a092a7SEtienne Carriere /* panic() can get a string or no argument */
3187a092a7SEtienne Carriere #define _panic0()	__panic((void *)0)
3287a092a7SEtienne Carriere #define _panic1(s)	__panic(s)
3387a092a7SEtienne Carriere #define _panic_fn(a, b, name, ...) name
3487a092a7SEtienne Carriere #define panic(...) _panic_fn("", ##__VA_ARGS__, _panic1, _panic0)(__VA_ARGS__)
35b0104773SPascal Brand 
36b0104773SPascal Brand #endif /*KERNEL_PANIC_H*/
37