diff options
author | Mitch Phillips <mitchphillips@outlook.com> | 2019-03-14 17:05:53 +0000 |
---|---|---|
committer | Mitch Phillips <mitchphillips@outlook.com> | 2019-03-14 17:05:53 +0000 |
commit | 6dcea08c82cde6cdc71b9495b0feade66103cea5 (patch) | |
tree | c1d20f452beb99a2df9987b4bc3fbc501adffb8e /lib/hwasan | |
parent | a0c8d98e1c90f4d0b7370835cce399cb9bf54ceb (diff) | |
download | compiler-rt-6dcea08c82cde6cdc71b9495b0feade66103cea5.tar.gz |
[HWASan] Use less Printf() calls in register dump.
Summary:
Explicitly print 4 registers/line in each iteration during register
dump. Reduces logcat spam as we get a single logcat message per call to
Printf(), even if the output isn't newline-terminated. This brings the
output format in logcat closer to that of the normal textual dump.
Reviewers: eugenis, pcc
Reviewed By: pcc
Subscribers: kubamracek, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D59320
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@356166 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/hwasan')
-rw-r--r-- | lib/hwasan/hwasan_report.cpp | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/lib/hwasan/hwasan_report.cpp b/lib/hwasan/hwasan_report.cpp index ddc2749c2..fa2fff742 100644 --- a/lib/hwasan/hwasan_report.cpp +++ b/lib/hwasan/hwasan_report.cpp @@ -439,23 +439,29 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size, // 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 |