summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/tsan/rtl/tsan_fd.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2014-10-15 08:56:43 +0000
committerDmitry Vyukov <dvyukov@google.com>2014-10-15 08:56:43 +0000
commit6373829449e48634ae7548e3a5e9c2869b104d32 (patch)
tree42f38c33bf9af7ac0132128d8d4a225b754f22df /compiler-rt/lib/tsan/rtl/tsan_fd.cc
parenta08a8dc01d208635b58dd41b804967802f743c79 (diff)
downloadbcm5719-llvm-6373829449e48634ae7548e3a5e9c2869b104d32.tar.gz
bcm5719-llvm-6373829449e48634ae7548e3a5e9c2869b104d32.zip
tsan: fix false positive related to signals
Write interceptor calls malloc, which causes a false unsafe-call-in-signal-handler report. See the test. llvm-svn: 219784
Diffstat (limited to 'compiler-rt/lib/tsan/rtl/tsan_fd.cc')
-rw-r--r--compiler-rt/lib/tsan/rtl/tsan_fd.cc9
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_fd.cc b/compiler-rt/lib/tsan/rtl/tsan_fd.cc
index 68242e03ce1..d18502f0054 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_fd.cc
+++ b/compiler-rt/lib/tsan/rtl/tsan_fd.cc
@@ -48,7 +48,8 @@ static bool bogusfd(int fd) {
}
static FdSync *allocsync(ThreadState *thr, uptr pc) {
- FdSync *s = (FdSync*)user_alloc(thr, pc, sizeof(FdSync));
+ FdSync *s = (FdSync*)user_alloc(thr, pc, sizeof(FdSync), kDefaultAlignment,
+ false);
atomic_store(&s->rc, 1, memory_order_relaxed);
return s;
}
@@ -65,7 +66,7 @@ static void unref(ThreadState *thr, uptr pc, FdSync *s) {
CHECK_NE(s, &fdctx.globsync);
CHECK_NE(s, &fdctx.filesync);
CHECK_NE(s, &fdctx.socksync);
- user_free(thr, pc, s);
+ user_free(thr, pc, s, false);
}
}
}
@@ -78,13 +79,13 @@ static FdDesc *fddesc(ThreadState *thr, uptr pc, int fd) {
if (l1 == 0) {
uptr size = kTableSizeL2 * sizeof(FdDesc);
// We need this to reside in user memory to properly catch races on it.
- void *p = user_alloc(thr, pc, size);
+ void *p = user_alloc(thr, pc, size, kDefaultAlignment, false);
internal_memset(p, 0, size);
MemoryResetRange(thr, (uptr)&fddesc, (uptr)p, size);
if (atomic_compare_exchange_strong(pl1, &l1, (uptr)p, memory_order_acq_rel))
l1 = (uptr)p;
else
- user_free(thr, pc, p);
+ user_free(thr, pc, p, false);
}
return &((FdDesc*)l1)[fd % kTableSizeL2]; // NOLINT
}
OpenPOWER on IntegriCloud