| /* 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 |