Reduce stack usage when unwinding from 170 to 128 on x64
PiperOrigin-RevId: 830569454
Change-Id: If5f56cc64ad1f3fe2de45c273b2567ba6ebfe9ed
diff --git a/absl/debugging/stacktrace.cc b/absl/debugging/stacktrace.cc
index 420005c..557261e 100644
--- a/absl/debugging/stacktrace.cc
+++ b/absl/debugging/stacktrace.cc
@@ -80,11 +80,12 @@
int skip_count, const void* uc,
int* min_dropped_frames,
bool unwind_with_fixup = true) {
- static constexpr size_t kMinPageSize = 4096;
+ static constexpr size_t kMaxStackElements = 128;
- // Allow up to ~half a page, leaving some slack space for local variables etc.
- static constexpr size_t kMaxStackElements =
- (kMinPageSize / 2) / (sizeof(*frames) + sizeof(*sizes));
+ static constexpr size_t kMinPageSize = 4096;
+ static_assert(
+ kMaxStackElements * (sizeof(*frames) + sizeof(*sizes)) < kMinPageSize / 2,
+ "buffer size should be a fraction of a page to avoid stack overflows");
// Allocate a buffer dynamically, using the signal-safe allocator.
static constexpr auto allocate = [](size_t num_bytes) -> void* {