37 #include "absl/debugging/stacktrace.h"
41 #include "absl/base/attributes.h"
42 #include "absl/base/port.h"
43 #include "absl/debugging/internal/stacktrace_config.h"
45 #if defined(ABSL_STACKTRACE_INL_HEADER)
46 #include ABSL_STACKTRACE_INL_HEADER
48 # error Cannot calculate stack trace: will need to write for your environment
50 # include "absl/debugging/internal/stacktrace_aarch64-inl.inc"
51 # include "absl/debugging/internal/stacktrace_arm-inl.inc"
52 # include "absl/debugging/internal/stacktrace_emscripten-inl.inc"
53 # include "absl/debugging/internal/stacktrace_generic-inl.inc"
54 # include "absl/debugging/internal/stacktrace_powerpc-inl.inc"
55 # include "absl/debugging/internal/stacktrace_riscv-inl.inc"
56 # include "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
57 # include "absl/debugging/internal/stacktrace_win32-inl.inc"
58 # include "absl/debugging/internal/stacktrace_x86-inl.inc"
68 template <
bool IS_STACK_FRAMES,
bool IS_WITH_CONTEXT>
70 int max_depth,
int skip_count,
72 int* min_dropped_frames) {
73 Unwinder f = &UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>;
75 if (
g !=
nullptr) f =
g;
78 int size = (*f)(
result, sizes, max_depth, skip_count + 1, uc,
88 void**
result,
int* sizes,
int max_depth,
int skip_count) {
89 return Unwind<true, false>(
result, sizes, max_depth, skip_count,
nullptr,
95 int skip_count,
const void* uc,
96 int* min_dropped_frames) {
97 return Unwind<true, true>(
result, sizes, max_depth, skip_count, uc,
102 void**
result,
int max_depth,
int skip_count) {
103 return Unwind<false, false>(
result,
nullptr, max_depth, skip_count,
nullptr,
109 const void* uc,
int* min_dropped_frames) {
110 return Unwind<false, true>(
result,
nullptr, max_depth, skip_count, uc,
115 custom.store(w, std::memory_order_release);
119 const void* uc,
int* min_dropped_frames) {
122 if (sizes ==
nullptr) {
124 f = &UnwindImpl<false, false>;
126 f = &UnwindImpl<false, true>;
130 f = &UnwindImpl<true, false>;
132 f = &UnwindImpl<true, true>;
136 int n = (*f)(
pcs, sizes,
depth,
skip, uc, min_dropped_frames);