[PATCH] D59320: [HWASan] Use less Printf() calls in register dump.

Mitch Phillips via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 13 17:26:23 PDT 2019


hctim updated this revision to Diff 190548.
hctim marked an inline comment as done.
hctim added a comment.

Unrolled all the prints.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D59320/new/

https://reviews.llvm.org/D59320

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


Index: compiler-rt/lib/hwasan/hwasan_report.cpp
===================================================================
--- compiler-rt/lib/hwasan/hwasan_report.cpp
+++ compiler-rt/lib/hwasan/hwasan_report.cpp
@@ -439,23 +439,29 @@
 
 // See the frame breakdown defined in __hwasan_tag_mismatch (from
 // hwasan_tag_mismatch_aarch64.S).
-static const char *kDoubleSpace = "  ";
-static const char *kSingleSpace = " ";
 void ReportRegisters(uptr *frame, uptr pc) {
-  Printf("Registers where the failure occurred (pc %p):", pc);
-
-  for (unsigned i = 0; i <= 30; i++) {
-    if (i % 4 == 0)
-      Printf("\n  ");
-
-    // Note - manually inserting a double or single space here based on the
-    // number of digits in the register name, as our sanitizer Printf does not
-    // support padding where the content is left aligned (i.e. the format
-    // specifier "%-2d" will CHECK fail).
-    Printf("  x%d%s%016llx", i, (i < 10) ? kDoubleSpace : kSingleSpace,
-           frame[i]);
-  }
-  Printf("\n");
+  Printf("Registers where the failure occurred (pc %p):\n", pc);
+
+  // We explicitly print a single line (4 registers/line) each iteration to
+  // reduce the amount of logcat error messages printed. Each Printf() will
+  // result in a new logcat line, irrespective of whether a newline is present,
+  // and so we wish to reduce the number of Printf() calls we have to make.
+  Printf("    x0  %016llx  x1  %016llx  x2  %016llx  x3  %016llx\n",
+       frame[0], frame[1], frame[2], frame[3]);
+  Printf("    x4  %016llx  x5  %016llx  x6  %016llx  x7  %016llx\n",
+       frame[4], frame[5], frame[6], frame[7]);
+  Printf("    x8  %016llx  x9  %016llx  x10 %016llx  x11 %016llx\n",
+       frame[8], frame[9], frame[10], frame[11]);
+  Printf("    x12 %016llx  x13 %016llx  x14 %016llx  x15 %016llx\n",
+       frame[12], frame[13], frame[14], frame[15]);
+  Printf("    x16 %016llx  x17 %016llx  x18 %016llx  x19 %016llx\n",
+       frame[16], frame[17], frame[18], frame[19]);
+  Printf("    x20 %016llx  x21 %016llx  x22 %016llx  x23 %016llx\n",
+       frame[20], frame[21], frame[22], frame[23]);
+  Printf("    x24 %016llx  x25 %016llx  x26 %016llx  x27 %016llx\n",
+       frame[24], frame[25], frame[26], frame[27]);
+  Printf("    x28 %016llx  x29 %016llx  x30 %016llx\n",
+       frame[28], frame[29], frame[30]);
 }
 
 }  // namespace __hwasan


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D59320.190548.patch
Type: text/x-patch
Size: 2366 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190314/175db484/attachment.bin>


More information about the llvm-commits mailing list