[compiler-rt] 0fb6da8 - [NFC][hwasan] Create *Report classes (#66682)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 18 17:14:49 PDT 2023


Author: Vitaly Buka
Date: 2023-09-18T17:14:44-07:00
New Revision: 0fb6da8babd6d1b941ce0040e96df6d67a5bd681

URL: https://github.com/llvm/llvm-project/commit/0fb6da8babd6d1b941ce0040e96df6d67a5bd681
DIFF: https://github.com/llvm/llvm-project/commit/0fb6da8babd6d1b941ce0040e96df6d67a5bd681.diff

LOG: [NFC][hwasan] Create *Report classes (#66682)

This prepare the code for rework to collect all nececcecary data before
symbolization. Symbolization as any untrivial computations may affect
hwasan metadata.

Added: 
    

Modified: 
    compiler-rt/lib/hwasan/hwasan_report.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/hwasan/hwasan_report.cpp b/compiler-rt/lib/hwasan/hwasan_report.cpp
index 45eff07d34c1300..436eb37b793fc04 100644
--- a/compiler-rt/lib/hwasan/hwasan_report.cpp
+++ b/compiler-rt/lib/hwasan/hwasan_report.cpp
@@ -569,9 +569,20 @@ uptr GetTopPc(StackTrace *stack) {
                      : 0;
 }
 
-void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
-  ScopedReport R(flags()->halt_on_error);
+namespace {
+class InvalidFreeReport {
+ public:
+  InvalidFreeReport(StackTrace *stack, uptr tagged_addr)
+      : stack(stack), tagged_addr(tagged_addr) {}
+  ~InvalidFreeReport();
 
+ private:
+  StackTrace *stack;
+  uptr tagged_addr;
+};
+
+InvalidFreeReport::~InvalidFreeReport() {
+  ScopedReport R(flags()->halt_on_error);
   uptr untagged_addr = UntagAddr(tagged_addr);
   tag_t ptr_tag = GetTagFromPointer(tagged_addr);
   tag_t *tag_ptr = nullptr;
@@ -610,9 +621,31 @@ void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
   MaybePrintAndroidHelpUrl();
   ReportErrorSummary(bug_type, stack);
 }
+}  // namespace
 
-void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
-                           const u8 *expected) {
+void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
+  InvalidFreeReport R(stack, tagged_addr);
+}
+
+namespace {
+class TailOverwrittenReport {
+ public:
+  explicit TailOverwrittenReport(StackTrace *stack, uptr tagged_addr,
+                                 uptr orig_size, const u8 *expected)
+      : stack(stack),
+        tagged_addr(tagged_addr),
+        orig_size(orig_size),
+        expected(expected) {}
+  ~TailOverwrittenReport();
+
+ private:
+  StackTrace *stack;
+  uptr tagged_addr;
+  uptr orig_size;
+  const u8 *expected;
+};
+
+TailOverwrittenReport::~TailOverwrittenReport() {
   uptr tail_size = kShadowAlignment - (orig_size % kShadowAlignment);
   u8 actual_expected[kShadowAlignment];
   internal_memcpy(actual_expected, expected, tail_size);
@@ -682,9 +715,37 @@ void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
   MaybePrintAndroidHelpUrl();
   ReportErrorSummary(bug_type, stack);
 }
+}  // namespace
 
-void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
-                       bool is_store, bool fatal, uptr *registers_frame) {
+void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
+                           const u8 *expected) {
+  TailOverwrittenReport R(stack, tagged_addr, orig_size, expected);
+}
+
+namespace {
+class TagMismatchReport {
+ public:
+  explicit TagMismatchReport(StackTrace *stack, uptr tagged_addr,
+                             uptr access_size, bool is_store, bool fatal,
+                             uptr *registers_frame)
+      : stack(stack),
+        tagged_addr(tagged_addr),
+        access_size(access_size),
+        is_store(is_store),
+        fatal(fatal),
+        registers_frame(registers_frame) {}
+  ~TagMismatchReport();
+
+ private:
+  StackTrace *stack;
+  uptr tagged_addr;
+  uptr access_size;
+  bool is_store;
+  bool fatal;
+  uptr *registers_frame;
+};
+
+TagMismatchReport::~TagMismatchReport() {
   ScopedReport R(fatal);
   SavedStackAllocations current_stack_allocations(
       GetCurrentThread()->stack_allocations());
@@ -753,6 +814,13 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
   MaybePrintAndroidHelpUrl();
   ReportErrorSummary(bug_type, stack);
 }
+}  // namespace
+
+void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
+                       bool is_store, bool fatal, uptr *registers_frame) {
+  TagMismatchReport R(stack, tagged_addr, access_size, is_store, fatal,
+                      registers_frame);
+}
 
 // See the frame breakdown defined in __hwasan_tag_mismatch (from
 // hwasan_tag_mismatch_{aarch64,riscv64}.S).


        


More information about the llvm-commits mailing list