diff --git a/compiler-rt/lib/msan/msan.cpp b/compiler-rt/lib/msan/msan.cpp index 3c1ae17c7bb347..2202e344692137 100644 --- a/compiler-rt/lib/msan/msan.cpp +++ b/compiler-rt/lib/msan/msan.cpp @@ -515,6 +515,7 @@ void __msan_dump_shadow(const void *x, uptr size) { } unsigned char *s = (unsigned char*)MEM_TO_SHADOW(x); + Printf("%p[%p] ", s, x); for (uptr i = 0; i < size; i++) Printf("%x%x ", s[i] >> 4, s[i] & 0xf); Printf("\n"); diff --git a/compiler-rt/lib/msan/msan_report.cpp b/compiler-rt/lib/msan/msan_report.cpp index 3a7a237dea0705..ff3e38c7db9ed8 100644 --- a/compiler-rt/lib/msan/msan_report.cpp +++ b/compiler-rt/lib/msan/msan_report.cpp @@ -201,15 +201,18 @@ void DescribeMemoryRange(const void *x, uptr size) { Decorator d; Printf("%s", d.Warning()); - Printf("Shadow map of [%p, %p), %zu bytes:\n", + uptr start_x = reinterpret_cast(x); + Printf("Shadow map [%p, %p) of [%p, %p), %zu bytes:\n", reinterpret_cast(start), reinterpret_cast(end), - end - start); + reinterpret_cast(start_x), + reinterpret_cast(start_x + end - start), end - start); Printf("%s", d.Default()); while (s < e) { // Line start. if (pos % 16 == 0) { for (int i = 0; i < 4; ++i) origin_ids[i] = -1; - Printf("%p:", reinterpret_cast(s)); + Printf("%p[%p]:", reinterpret_cast(s), + reinterpret_cast(start_x - start + s)); } // Group start. if (pos % 4 == 0) { diff --git a/compiler-rt/test/msan/msan_check_mem_is_initialized.cpp b/compiler-rt/test/msan/msan_check_mem_is_initialized.cpp index 81f7895f7aea36..81752291c7c5c9 100644 --- a/compiler-rt/test/msan/msan_check_mem_is_initialized.cpp +++ b/compiler-rt/test/msan/msan_check_mem_is_initialized.cpp @@ -16,7 +16,7 @@ int main(void) { #ifdef POSITIVE __msan_check_mem_is_initialized(p + 5, 20); // CHECK: Uninitialized bytes in __msan_check_mem_is_initialized at offset 5 inside [0x{{.*}}, 20) - // CHECK-VERBOSE: Shadow map of [0x{{.*}}, 0x{{.*}}), 20 bytes: + // CHECK-VERBOSE: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 20 bytes: // CHECK-VERBOSE: 0x{{.*}}: ..000000 0000ffff 00000000 00000000 // CHECK-VERBOSE: 0x{{.*}}: 00000000 00...... ........ ........ diff --git a/compiler-rt/test/msan/msan_dump_shadow.cpp b/compiler-rt/test/msan/msan_dump_shadow.cpp index 543fa701322394..48b84ef50f723f 100644 --- a/compiler-rt/test/msan/msan_dump_shadow.cpp +++ b/compiler-rt/test/msan/msan_dump_shadow.cpp @@ -18,5 +18,5 @@ int main(void) { return 0; } -// CHECK: ff ff ff ff ff -// CHECK: 00 00 00 +// CHECK: 0x{{[0-9a-f]+}}[0x{{[0-9a-f]+}}] ff ff ff ff ff +// CHECK: 0x{{[0-9a-f]+}}[0x{{[0-9a-f]+}}] 00 00 00 diff --git a/compiler-rt/test/msan/msan_print_shadow.cpp b/compiler-rt/test/msan/msan_print_shadow.cpp index bdee3102c1ccb0..2782fcd83ed7d4 100644 --- a/compiler-rt/test/msan/msan_print_shadow.cpp +++ b/compiler-rt/test/msan/msan_print_shadow.cpp @@ -52,7 +52,7 @@ int main(void) { return 0; } -// CHECK: Shadow map of [{{.*}}), 297 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 297 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: ..00ffff 00000000 ffffffff ffffffff // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff diff --git a/compiler-rt/test/msan/msan_print_shadow2.cpp b/compiler-rt/test/msan/msan_print_shadow2.cpp index 5095081c9655d7..05c1cb12bef8cb 100644 --- a/compiler-rt/test/msan/msan_print_shadow2.cpp +++ b/compiler-rt/test/msan/msan_print_shadow2.cpp @@ -22,28 +22,28 @@ int main(void) { return 0; } -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 1 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: ff...... ........ ........ ........ // CHECK-ORIGINS: 0x{{.*}}: ff...... ........ ........ ........ |A . . .| // CHECK-ORIGINS: Origin A (origin_id {{.*}}): -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 1 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: ..ff.... ........ ........ ........ // CHECK-ORIGINS: 0x{{.*}}: ..ff.... ........ ........ ........ |A . . .| // CHECK-ORIGINS: Origin A (origin_id {{.*}}): -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 1 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: ......ff ........ ........ ........ // CHECK-ORIGINS: 0x{{.*}}: ......ff ........ ........ ........ |A . . .| // CHECK-ORIGINS: Origin A (origin_id {{.*}}): -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 1 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: ......ff ........ ........ ........ // CHECK-ORIGINS: 0x{{.*}}: ......ff ........ ........ ........ |A . . .| // CHECK-ORIGINS: Origin A (origin_id {{.*}}): -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 0 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 0 bytes: -// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 3 bytes: +// CHECK: Shadow map [0x{{.*}}, 0x{{.*}}) of [0x{{.*}}, 0x{{.*}}), 3 bytes: // CHECK-NO-ORIGINS: 0x{{.*}}: 000000.. ........ ........ ........ // CHECK-ORIGINS: 0x{{.*}}: 000000.. ........ ........ ........ |. . . .| diff --git a/compiler-rt/test/msan/msan_print_shadow3.cpp b/compiler-rt/test/msan/msan_print_shadow3.cpp index 410755e5dbaaa6..d9f55a6eef9a89 100644 --- a/compiler-rt/test/msan/msan_print_shadow3.cpp +++ b/compiler-rt/test/msan/msan_print_shadow3.cpp @@ -12,5 +12,5 @@ int main(void) { return 0; } -// CHECK: Shadow map of [{{.*}}), 4 bytes: +// CHECK: Shadow map [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}) of [0x{{[0-9a-f]+}}, 0x{{[0-9a-f]+}}), 4 bytes: // CHECK: 0x{{.*}}: 77654321 ........ ........ ........