34 lines
		
	
	
		
			678 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			678 B
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0 */
 | |
| #ifndef _LIBLOCKDEP_LINUX_STACKTRACE_H_
 | |
| #define _LIBLOCKDEP_LINUX_STACKTRACE_H_
 | |
| 
 | |
| #include <execinfo.h>
 | |
| 
 | |
| struct stack_trace {
 | |
| 	unsigned int nr_entries, max_entries;
 | |
| 	unsigned long *entries;
 | |
| 	int skip;
 | |
| };
 | |
| 
 | |
| static inline void print_stack_trace(struct stack_trace *trace, int spaces)
 | |
| {
 | |
| 	backtrace_symbols_fd((void **)trace->entries, trace->nr_entries, 1);
 | |
| }
 | |
| 
 | |
| #define save_stack_trace(trace)	\
 | |
| 	((trace)->nr_entries =	\
 | |
| 		backtrace((void **)(trace)->entries, (trace)->max_entries))
 | |
| 
 | |
| static inline int dump_stack(void)
 | |
| {
 | |
| 	void *array[64];
 | |
| 	size_t size;
 | |
| 
 | |
| 	size = backtrace(array, 64);
 | |
| 	backtrace_symbols_fd(array, size, 1);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| #endif
 | 
