[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