diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2014-08-13 13:20:23 +0000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2014-08-13 13:20:23 +0000 |
| commit | 5f86aaa27bc3e0842f4961ca3efa56438eaab318 (patch) | |
| tree | abf521737415bce37e20b8e5db400378b8aaa8f4 | |
| parent | 87cc65265154a7b46429d6cb5a27f0530a65a277 (diff) | |
| download | bcm5719-llvm-5f86aaa27bc3e0842f4961ca3efa56438eaab318.tar.gz bcm5719-llvm-5f86aaa27bc3e0842f4961ca3efa56438eaab318.zip | |
tsan: fix unaligned memory access routine
It was possimitically handling an aligned 8-byte access as 2 4-byte accesses.
llvm-svn: 215546
| -rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_rtl.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc index 1a25a5c188a..118e413adb7 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc @@ -605,13 +605,13 @@ void UnalignedMemoryAccess(ThreadState *thr, uptr pc, uptr addr, while (size) { int size1 = 1; int kAccessSizeLog = kSizeLog1; - if (size >= 8 && (addr & ~7) == ((addr + 8) & ~7)) { + if (size >= 8 && (addr & ~7) == ((addr + 7) & ~7)) { size1 = 8; kAccessSizeLog = kSizeLog8; - } else if (size >= 4 && (addr & ~7) == ((addr + 4) & ~7)) { + } else if (size >= 4 && (addr & ~7) == ((addr + 3) & ~7)) { size1 = 4; kAccessSizeLog = kSizeLog4; - } else if (size >= 2 && (addr & ~7) == ((addr + 2) & ~7)) { + } else if (size >= 2 && (addr & ~7) == ((addr + 1) & ~7)) { size1 = 2; kAccessSizeLog = kSizeLog2; } |

