| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* |
| * Copyright (c) 2014, STMicroelectronics International N.V. |
| */ |
| |
| #ifndef KERNEL_PANIC_H |
| #define KERNEL_PANIC_H |
| |
| #include <compiler.h> |
| |
| /* debug disabled => __FILE__, ... and panic message are not built. */ |
| #if defined(CFG_TEE_CORE_DEBUG) |
| #define __panic(str) __do_panic(__FILE__, __LINE__, __func__, str) |
| #else |
| #define __panic(str) __do_panic((void *)0, 0, (void *)0, (void *)0) |
| #endif |
| |
| void __do_panic(const char *file, const int line, const char *func, |
| const char *msg) __noreturn; |
| |
| /* |
| * Suppress GCC warning on expansion of the panic() macro with no argument: |
| * 'ISO C99 requires at least one argument for the "..." in a variadic macro' |
| * Occurs when '-pedantic' is combined with '-std=gnu99'. |
| * Suppression applies only to this file and the expansion of macros defined in |
| * this file. |
| */ |
| #pragma GCC system_header |
| |
| /* panic() can get a string or no argument */ |
| #define _panic0() __panic((void *)0) |
| #define _panic1(s) __panic(s) |
| #define _panic_fn(a, b, name, ...) name |
| #define panic(...) _panic_fn("", ##__VA_ARGS__, _panic1, _panic0)(__VA_ARGS__) |
| |
| #endif /*KERNEL_PANIC_H*/ |