[NFC][sanitizer] Limit StackStore stack size/tag to 1 byte
authorVitaly Buka <vitalybuka@google.com>
Wed, 24 Nov 2021 00:52:02 +0000 (16:52 -0800)
committerVitaly Buka <vitalybuka@google.com>
Wed, 24 Nov 2021 00:56:34 +0000 (16:56 -0800)
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
compiler-rt/lib/sanitizer_common/sanitizer_stacktrace.h

index e6c61d9..d46047b 100644 (file)
@@ -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<uptr>(trace.size, (1u << 8) - 1)), tag(trace.tag) {
+    CHECK_EQ(trace.tag, static_cast<uptr>(tag));
   }
   explicit StackTraceHeader(uptr h)
       : size(h & ((1 << kStackSizeBits) - 1)), tag(h >> kStackSizeBits) {}
index 11c6154..aebd504 100644 (file)
@@ -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