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 15e55ef7c3SJerome 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 36*927d81acSJerome Forissier /* 37*927d81acSJerome Forissier * Weak function used in __do_panic() to put the current CPU on hold. 38*927d81acSJerome Forissier * If no arch-specific override is provided, defaults to a busy loop. 39*927d81acSJerome Forissier */ 40*927d81acSJerome Forissier void cpu_idle(void); 41*927d81acSJerome Forissier 42b0104773SPascal Brand #endif /*KERNEL_PANIC_H*/ 43