xref: /f-stack/dpdk/lib/librte_eal/linux/eal_debug.c (revision 2d9fd380)
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*2d9fd380Sjfb8856606 void 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