1*2d9fd380Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause 2*2d9fd380Sjfb8856606 * Copyright(c) 2010-2014 Intel Corporation 3*2d9fd380Sjfb8856606 */ 4*2d9fd380Sjfb8856606 5*2d9fd380Sjfb8856606 #ifdef RTE_BACKTRACE 6*2d9fd380Sjfb8856606 #include <execinfo.h> 7*2d9fd380Sjfb8856606 #endif 8*2d9fd380Sjfb8856606 #include <stdarg.h> 9*2d9fd380Sjfb8856606 #include <signal.h> 10*2d9fd380Sjfb8856606 #include <stdlib.h> 11*2d9fd380Sjfb8856606 #include <stdio.h> 12*2d9fd380Sjfb8856606 #include <stdint.h> 13*2d9fd380Sjfb8856606 14*2d9fd380Sjfb8856606 #include <rte_log.h> 15*2d9fd380Sjfb8856606 #include <rte_debug.h> 16*2d9fd380Sjfb8856606 #include <rte_common.h> 17*2d9fd380Sjfb8856606 #include <rte_eal.h> 18*2d9fd380Sjfb8856606 19*2d9fd380Sjfb8856606 #define BACKTRACE_SIZE 256 20*2d9fd380Sjfb8856606 21*2d9fd380Sjfb8856606 /* dump the stack of the calling core */ rte_dump_stack(void)22*2d9fd380Sjfb8856606void rte_dump_stack(void) 23*2d9fd380Sjfb8856606 { 24*2d9fd380Sjfb8856606 #ifdef RTE_BACKTRACE 25*2d9fd380Sjfb8856606 void *func[BACKTRACE_SIZE]; 26*2d9fd380Sjfb8856606 char **symb = NULL; 27*2d9fd380Sjfb8856606 int size; 28*2d9fd380Sjfb8856606 29*2d9fd380Sjfb8856606 size = backtrace(func, BACKTRACE_SIZE); 30*2d9fd380Sjfb8856606 symb = backtrace_symbols(func, size); 31*2d9fd380Sjfb8856606 32*2d9fd380Sjfb8856606 if (symb == NULL) 33*2d9fd380Sjfb8856606 return; 34*2d9fd380Sjfb8856606 35*2d9fd380Sjfb8856606 while (size > 0) { 36*2d9fd380Sjfb8856606 rte_log(RTE_LOG_ERR, RTE_LOGTYPE_EAL, 37*2d9fd380Sjfb8856606 "%d: [%s]\n", size, symb[size - 1]); 38*2d9fd380Sjfb8856606 size --; 39*2d9fd380Sjfb8856606 } 40*2d9fd380Sjfb8856606 41*2d9fd380Sjfb8856606 free(symb); 42*2d9fd380Sjfb8856606 #endif /* RTE_BACKTRACE */ 43*2d9fd380Sjfb8856606 } 44