1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2010-2014 Intel Corporation 3 */ 4 5 #ifndef _RTE_DEBUG_H_ 6 #define _RTE_DEBUG_H_ 7 8 /** 9 * @file 10 * 11 * Debug Functions in RTE 12 * 13 * This file defines a generic API for debug operations. Part of 14 * the implementation is architecture-specific. 15 */ 16 17 #include "rte_log.h" 18 #include "rte_branch_prediction.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /** 25 * Dump the stack of the calling core to the standard error. 26 */ 27 void rte_dump_stack(void); 28 29 /** 30 * Provide notification of a critical non-recoverable error and terminate 31 * execution abnormally. 32 * 33 * Display the format string and its expanded arguments (printf-like). 34 * 35 * In a linux environment, this function dumps the stack and calls 36 * abort() resulting in a core dump if enabled. 37 * 38 * The function never returns. 39 * 40 * @param ... 41 * The format string, followed by the variable list of arguments. 42 */ 43 #define rte_panic(...) rte_panic_(__func__, __VA_ARGS__, "dummy") 44 #define rte_panic_(func, format, ...) __rte_panic(func, format "%.0s", __VA_ARGS__) 45 46 #ifdef RTE_ENABLE_ASSERT 47 #define RTE_ASSERT(exp) RTE_VERIFY(exp) 48 #else 49 #define RTE_ASSERT(exp) do {} while (0) 50 #endif 51 #define RTE_VERIFY(exp) do { \ 52 if (unlikely(!(exp))) \ 53 rte_panic("line %d\tassert \"%s\" failed\n", __LINE__, #exp); \ 54 } while (0) 55 56 /* 57 * Provide notification of a critical non-recoverable error and stop. 58 * 59 * This function should not be called directly. Refer to rte_panic() macro 60 * documentation. 61 */ 62 void __rte_panic(const char *funcname , const char *format, ...) 63 __rte_cold 64 __rte_noreturn 65 __rte_format_printf(2, 3); 66 67 #ifdef __cplusplus 68 } 69 #endif 70 71 #endif /* _RTE_DEBUG_H_ */ 72