summaryrefslogtreecommitdiff
path: root/lib/tsan
diff options
context:
space:
mode:
authorVitaly Buka <vitalybuka@google.com>2017-11-10 22:41:52 +0000
committerVitaly Buka <vitalybuka@google.com>2017-11-10 22:41:52 +0000
commit6ca78590b388a5b7cb55d8836b7c5082153062ff (patch)
tree167a51ee74baaeeb1edf07d392073d65174e571a /lib/tsan
parent8357d02f2d4f6c22202fb25f3b4c97fb2b893ec9 (diff)
[tsan] Move out more types to sanitizer_common
https://github.com/google/sanitizers/issues/637 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@317946 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan')
-rw-r--r--lib/tsan/rtl/tsan_interceptors.cc29
1 files changed, 13 insertions, 16 deletions
diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc
index 1c704e933..17daf9e50 100644
--- a/lib/tsan/rtl/tsan_interceptors.cc
+++ b/lib/tsan/rtl/tsan_interceptors.cc
@@ -144,13 +144,6 @@ typedef long long_t; // NOLINT
# define F_TLOCK 2 /* Test and lock a region for exclusive use. */
# define F_TEST 3 /* Test a region for other processes locks. */
-typedef void (*sighandler_t)(int sig);
-typedef void (*sigactionhandler_t)(int sig, __sanitizer_siginfo *siginfo,
- void *uctx);
-
-const sighandler_t SIG_DFL = (sighandler_t)0;
-const sighandler_t SIG_IGN = (sighandler_t)1;
-const sighandler_t SIG_ERR = (sighandler_t)-1;
#if SANITIZER_FREEBSD || SANITIZER_MAC || SANITIZER_NETBSD
const int SA_SIGINFO = 0x40;
const int SIG_SETMASK = 3;
@@ -1827,11 +1820,11 @@ static void CallUserSignalHandler(ThreadState *thr, bool sync, bool acquire,
// because the handler can reset it.
volatile uptr pc =
sigact ? (uptr)sigactions[sig].sigaction : (uptr)sigactions[sig].handler;
- if (pc != (uptr)SIG_DFL && pc != (uptr)SIG_IGN) {
+ if (pc != sig_dfl && pc != sig_ign) {
if (sigact)
- ((sigactionhandler_t)pc)(sig, info, uctx);
+ ((__sanitizer_sigactionhandler_ptr)pc)(sig, info, uctx);
else
- ((sighandler_t)pc)(sig);
+ ((__sanitizer_sighandler_ptr)pc)(sig);
}
if (!ctx->after_multithreaded_fork) {
thr->ignore_reads_and_writes = ignore_reads_and_writes;
@@ -1952,14 +1945,16 @@ static void rtl_sigaction(int sig, __sanitizer_siginfo *info, void *ctx) {
static int sigaction_impl(int sig, __sanitizer_sigaction *act,
__sanitizer_sigaction *old);
-static sighandler_t signal_impl(int sig, sighandler_t h);
+static __sanitizer_sighandler_ptr signal_impl(int sig,
+ __sanitizer_sighandler_ptr h);
TSAN_INTERCEPTOR(int, sigaction, int sig, __sanitizer_sigaction *act,
__sanitizer_sigaction *old) {
return sigaction_impl(sig, act, old);
}
-TSAN_INTERCEPTOR(sighandler_t, signal, int sig, sighandler_t h) {
+TSAN_INTERCEPTOR(__sanitizer_sighandler_ptr, signal, int sig,
+ __sanitizer_sighandler_ptr h) {
return signal_impl(sig, h);
}
@@ -2293,7 +2288,8 @@ int sigaction_impl(int sig, __sanitizer_sigaction *act,
// and signal handler reads the handler concurrently. It it can read
// some bytes from old value and some bytes from new value.
// Use volatile to prevent insertion of memcpy.
- sigactions[sig].handler = *(volatile sighandler_t *)&act->handler;
+ sigactions[sig].handler =
+ *(volatile __sanitizer_sighandler_ptr *)&act->handler;
sigactions[sig].sa_flags = *(volatile int *)&act->sa_flags;
internal_memcpy(&sigactions[sig].sa_mask, &act->sa_mask,
sizeof(sigactions[sig].sa_mask));
@@ -2303,7 +2299,7 @@ int sigaction_impl(int sig, __sanitizer_sigaction *act,
__sanitizer_sigaction newact;
internal_memcpy(&newact, act, sizeof(newact));
internal_sigfillset(&newact.sa_mask);
- if (act->handler != SIG_IGN && act->handler != SIG_DFL) {
+ if ((uptr)act->handler != sig_ign && (uptr)act->handler != sig_dfl) {
if (newact.sa_flags & SA_SIGINFO)
newact.sigaction = rtl_sigaction;
else
@@ -2314,14 +2310,15 @@ int sigaction_impl(int sig, __sanitizer_sigaction *act,
return res;
}
-static sighandler_t signal_impl(int sig, sighandler_t h) {
+static __sanitizer_sighandler_ptr signal_impl(int sig,
+ __sanitizer_sighandler_ptr h) {
__sanitizer_sigaction act;
act.handler = h;
internal_memset(&act.sa_mask, -1, sizeof(act.sa_mask));
act.sa_flags = 0;
__sanitizer_sigaction old;
int res = sigaction(sig, &act, &old);
- if (res) return SIG_ERR;
+ if (res) return (__sanitizer_sighandler_ptr)sig_err;
return old.handler;
}