^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _LIBLOCKDEP_LINUX_STACKTRACE_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _LIBLOCKDEP_LINUX_STACKTRACE_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <execinfo.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) struct stack_trace {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) unsigned int nr_entries, max_entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) unsigned long *entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) int skip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) static inline void print_stack_trace(struct stack_trace *trace, int spaces)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) backtrace_symbols_fd((void **)trace->entries, trace->nr_entries, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define save_stack_trace(trace) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ((trace)->nr_entries = \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) backtrace((void **)(trace)->entries, (trace)->max_entries))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) static inline int dump_stack(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) void *array[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) size_t size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) size = backtrace(array, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) backtrace_symbols_fd(array, size, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #endif