diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-06-29 15:26:55 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-06-29 15:26:55 +0000 |
commit | ef5a5a5650bd278f127933e8130733d254e4b2f3 (patch) | |
tree | 6b75e14befed6e8686f83846e3d162e5f834f4a2 /compiler-rt | |
parent | 5bb47a6e0e901c3934155f8481f7fe62cbd94651 (diff) | |
download | bcm5719-llvm-ef5a5a5650bd278f127933e8130733d254e4b2f3.tar.gz bcm5719-llvm-ef5a5a5650bd278f127933e8130733d254e4b2f3.zip |
tsan: replace struct copies where clang inserts memcpy() calls with explicit internal_memcpy() calls
llvm-svn: 159431
Diffstat (limited to 'compiler-rt')
-rw-r--r-- | compiler-rt/lib/tsan/rtl/tsan_interceptors.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc index 3e41e7c7020..2e9426bc16f 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc @@ -1304,9 +1304,9 @@ static void ALWAYS_INLINE rtl_generic_sighandler(bool sigact, int sig, signal->armed = true; signal->sigaction = sigact; if (info) - signal->siginfo = *info; + internal_memcpy(&signal->siginfo, info, sizeof(*info)); if (ctx) - signal->ctx = *(ucontext_t*)ctx; + internal_memcpy(&signal->ctx, ctx, sizeof(signal->ctx)); sctx->pending_signal_count++; } } @@ -1322,11 +1322,12 @@ static void rtl_sigaction(int sig, my_siginfo_t *info, void *ctx) { TSAN_INTERCEPTOR(int, sigaction, int sig, sigaction_t *act, sigaction_t *old) { SCOPED_TSAN_INTERCEPTOR(sigaction, sig, act, old); if (old) - *old = sigactions[sig]; + internal_memcpy(old, &sigactions[sig], sizeof(*old)); if (act == 0) return 0; - sigactions[sig] = *act; - sigaction_t newact = *act; + internal_memcpy(&sigactions[sig], act, sizeof(*act)); + sigaction_t newact; + internal_memcpy(&newact, act, sizeof(newact)); sigfillset(&newact.sa_mask); if (act->sa_handler != SIG_IGN && act->sa_handler != SIG_DFL) { if (newact.sa_flags & SA_SIGINFO) |