From 6889592ebcdea168f9e7a5dc91b8549527e4dbf7 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Tue, 23 Nov 2021 16:52:02 -0800 Subject: [PATCH] [NFC][sanitizer] Limit StackStore stack size/tag to 1 byte Nothing uses more than 8bit now. So the rest of the headers can store other data. kStackTraceMax is 256 now, but all sanitizers by default store just 20-30 frames here. --- compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp | 10 +++++----- compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp index e6c61d9..d46047b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stack_store.cpp @@ -16,13 +16,13 @@ namespace __sanitizer { namespace { struct StackTraceHeader { - static constexpr u32 kStackSizeBits = 16; + static constexpr u32 kStackSizeBits = 8; - u32 size; - u32 tag; + u8 size; + u8 tag; explicit StackTraceHeader(const StackTrace &trace) - : size(trace.size), tag(trace.tag) { - CHECK_LT(trace.size, 1 << kStackSizeBits); + : size(Min(trace.size, (1u << 8) - 1)), tag(trace.tag) { + CHECK_EQ(trace.tag, static_cast(tag)); } explicit StackTraceHeader(uptr h) : size(h & ((1 << kStackSizeBits) - 1)), tag(h >> kStackSizeBits) {} diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h index 11c6154..aebd504 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h @@ -20,7 +20,7 @@ namespace __sanitizer { struct BufferedStackTrace; -static const u32 kStackTraceMax = 256; +static const u32 kStackTraceMax = 255; #if SANITIZER_LINUX && defined(__mips__) # define SANITIZER_CAN_FAST_UNWIND 0 -- 2.7.4