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_generic-inl.inc"
53 # include "absl/debugging/internal/stacktrace_powerpc-inl.inc"
54 # include "absl/debugging/internal/stacktrace_unimplemented-inl.inc"
55 # include "absl/debugging/internal/stacktrace_win32-inl.inc"
56 # include "absl/debugging/internal/stacktrace_x86-inl.inc"
64 std::atomic<Unwinder>
custom;
66 template <
bool IS_STACK_FRAMES,
bool IS_WITH_CONTEXT>
68 int max_depth,
int skip_count,
70 int* min_dropped_frames) {
71 Unwinder f = &UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>;
73 if (g !=
nullptr)
f =
g;
76 int size = (*f)(
result, sizes, max_depth, skip_count + 1, uc,
86 void**
result,
int* sizes,
int max_depth,
int skip_count) {
87 return Unwind<true, false>(
result, sizes, max_depth, skip_count,
nullptr,
93 int skip_count,
const void* uc,
94 int* min_dropped_frames) {
95 return Unwind<true, true>(
result, sizes, max_depth, skip_count, uc,
100 void**
result,
int max_depth,
int skip_count) {
101 return Unwind<false, false>(
result,
nullptr, max_depth, skip_count,
nullptr,
107 const void* uc,
int* min_dropped_frames) {
108 return Unwind<false, true>(
result,
nullptr, max_depth, skip_count, uc,
113 custom.store(w, std::memory_order_release);
117 const void* uc,
int* min_dropped_frames) {
120 if (sizes ==
nullptr) {
122 f = &UnwindImpl<false, false>;
124 f = &UnwindImpl<false, true>;
128 f = &UnwindImpl<true, false>;
130 f = &UnwindImpl<true, true>;
134 int n = (*f)(
pcs, sizes,
depth,
skip, uc, min_dropped_frames);