tsan: replace struct copies where clang inserts memcpy() calls with explicit internal_memcpy() calls
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@159431 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc
index 3e41e7c..2e9426b 100644
--- a/lib/tsan/rtl/tsan_interceptors.cc
+++ b/lib/tsan/rtl/tsan_interceptors.cc
@@ -1304,9 +1304,9 @@
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 @@
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)