summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2014-08-13 13:20:23 +0000
committerDmitry Vyukov <dvyukov@google.com>2014-08-13 13:20:23 +0000
commit5f86aaa27bc3e0842f4961ca3efa56438eaab318 (patch)
treeabf521737415bce37e20b8e5db400378b8aaa8f4
parent87cc65265154a7b46429d6cb5a27f0530a65a277 (diff)
downloadbcm5719-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.cc6
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;
}
OpenPOWER on IntegriCloud