diff options
| author | Reid Kleckner <rnk@google.com> | 2017-01-24 17:45:35 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2017-01-24 17:45:35 +0000 |
| commit | 310c3d3d26b81a816119e2e3d3fc9d03a75ee075 (patch) | |
| tree | c80aafcc372dff81dd693e181b85c80c36d38006 | |
| parent | 7784cacd91282e692a2be87015117188fa1990c1 (diff) | |
| download | bcm5719-llvm-310c3d3d26b81a816119e2e3d3fc9d03a75ee075.tar.gz bcm5719-llvm-310c3d3d26b81a816119e2e3d3fc9d03a75ee075.zip | |
Fix pc_array bounds check to use elements instead of bytes
pc_array_size and kPcArrayMaxSize appear to be measured in elements, not
bytes, so we shouldn't multiply idx by sizeof(uptr) in this bounds
check. 32-bit Chrome was tripping this assertion because it has 64
million coverage points. I don't think it's worth adding a test that has
that many coverage points.
llvm-svn: 292955
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc index ebdee33d7d5..497bdcb88c0 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc @@ -415,8 +415,7 @@ void CoverageData::Add(uptr pc, u32 *guard) { uptr idx = -guard_value - 1; if (idx >= atomic_load(&pc_array_index, memory_order_acquire)) return; // May happen after fork when pc_array_index becomes 0. - CHECK_LT(idx * sizeof(uptr), - atomic_load(&pc_array_size, memory_order_acquire)); + CHECK_LT(idx, atomic_load(&pc_array_size, memory_order_acquire)); uptr counter = atomic_fetch_add(&coverage_counter, 1, memory_order_relaxed); pc_array[idx] = BundlePcAndCounter(pc, counter); } |

