<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 15, 2013 at 4:57 PM, Dmitry Vyukov <span dir="ltr"><<a href="mailto:dvyukov@google.com" target="_blank">dvyukov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dvyukov<br>
Date: Tue Oct 15 07:57:59 2013<br>
New Revision: 192695<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=192695&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=192695&view=rev</a><br>
Log:<br>
tsan: move kernel struct definition from sanitizer_linux.h to sanitizer_platform_limits_posix.h<br>
<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=192695&r1=192694&r2=192695&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=192695&r1=192694&r2=192695&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc Tue Oct 15 07:57:59 2013<br>
@@ -37,7 +37,6 @@<br>
 #if SANITIZER_LINUX<br>
<br>
 #include "sanitizer_libc.h"<br>
-#include "sanitizer_linux.h"<br>
<br>
 #define PRE_SYSCALL(name)                                                      \<br>
   SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_syscall_pre_impl_##name<br>
@@ -104,6 +103,10 @@ struct sanitizer_kernel_sockaddr {<br>
   char sa_data[14];<br>
 };<br>
<br>
+// Real sigset size is always passed as a syscall argument.<br>
+// Declare it "void" to catch sizeof(kernel_sigset_t).<br>
+typedef void kernel_sigset_t;<br></blockquote><div><br></div><div>Do we still need this now?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
 static void kernel_write_iovec(const __sanitizer_iovec *iovec,<br>
                         SIZE_T iovlen, SIZE_T maxlen) {<br>
   for (SIZE_T i = 0; i < iovlen && maxlen; ++i) {<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=192695&r1=192694&r2=192695&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=192695&r1=192694&r2=192695&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Tue Oct 15 07:57:59 2013<br>
@@ -602,23 +602,23 @@ uptr internal_sigaltstack(const struct s<br>
   return internal_syscall(__NR_sigaltstack, ss, oss);<br>
 }<br>
<br>
-uptr internal_sigaction(int signum, const kernel_sigaction_t *act,<br>
-    struct kernel_sigaction_t *oldact) {<br>
+uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,<br>
+    __sanitizer_kernel_sigaction_t *oldact) {<br>
   return internal_syscall(__NR_rt_sigaction, signum, act, oldact,<br>
-      sizeof(kernel_sigset_t));<br>
+      sizeof(__sanitizer_kernel_sigset_t));<br>
 }<br>
<br>
-uptr internal_sigprocmask(int how, kernel_sigset_t *set,<br>
-    kernel_sigset_t *oldset) {<br>
+uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,<br>
+    __sanitizer_kernel_sigset_t *oldset) {<br>
   return internal_syscall(__NR_rt_sigprocmask, (uptr)how, &set->sig[0],<br>
-      &oldset->sig[0], sizeof(kernel_sigset_t));<br>
+      &oldset->sig[0], sizeof(__sanitizer_kernel_sigset_t));<br>
 }<br>
<br>
-void internal_sigfillset(kernel_sigset_t *set) {<br>
+void internal_sigfillset(__sanitizer_kernel_sigset_t *set) {<br>
   internal_memset(set, 0xff, sizeof(*set));<br>
 }<br>
<br>
-void internal_sigdelset(kernel_sigset_t *set, int signum) {<br>
+void internal_sigdelset(__sanitizer_kernel_sigset_t *set, int signum) {<br>
   signum -= 1;<br>
   CHECK_GE(signum, 0);<br>
   CHECK_LT(signum, sizeof(*set) * 8);<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h?rev=192695&r1=192694&r2=192695&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h?rev=192695&r1=192694&r2=192695&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.h Tue Oct 15 07:57:59 2013<br>
@@ -17,41 +17,27 @@<br>
 #if SANITIZER_LINUX<br>
 #include "sanitizer_common.h"<br>
 #include "sanitizer_internal_defs.h"<br>
+#include "sanitizer_platform_limits_posix.h"<br>
<br>
 struct link_map;  // Opaque type returned by dlopen().<br>
 struct sigaltstack;<br>
-typedef struct siginfo siginfo_t;<br>
<br>
 namespace __sanitizer {<br>
 // Dirent structure for getdents(). Note that this structure is different from<br>
 // the one in <dirent.h>, which is used by readdir().<br>
 struct linux_dirent;<br>
<br>
-struct kernel_sigset_t {<br>
-  u8 sig[FIRST_32_SECOND_64(16, 8)];<br>
-};<br>
-<br>
-struct kernel_sigaction_t {<br>
-  union {<br>
-    void (*sigaction)(int signo, siginfo_t *info, void *ctx);<br>
-    void (*handler)(int signo);<br>
-  };<br>
-  unsigned long sa_flags;<br>
-  void (*sa_restorer)(void);<br>
-  kernel_sigset_t sa_mask;<br>
-};<br>
-<br>
 // Syscall wrappers.<br>
 uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count);<br>
 uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);<br>
 uptr internal_sigaltstack(const struct sigaltstack* ss,<br>
                           struct sigaltstack* oss);<br>
-uptr internal_sigaction(int signum, const kernel_sigaction_t *act,<br>
-    kernel_sigaction_t *oldact);<br>
-uptr internal_sigprocmask(int how, kernel_sigset_t *set,<br>
-    kernel_sigset_t *oldset);<br>
-void internal_sigfillset(kernel_sigset_t *set);<br>
-void internal_sigdelset(kernel_sigset_t *set, int signum);<br>
+uptr internal_sigaction(int signum, const __sanitizer_kernel_sigaction_t *act,<br>
+    __sanitizer_kernel_sigaction_t *oldact);<br>
+uptr internal_sigprocmask(int how, __sanitizer_kernel_sigset_t *set,<br>
+    __sanitizer_kernel_sigset_t *oldset);<br>
+void internal_sigfillset(__sanitizer_kernel_sigset_t *set);<br>
+void internal_sigdelset(__sanitizer_kernel_sigset_t *set, int signum);<br>
<br>
 #ifdef __x86_64__<br>
 uptr internal_clone(int (*fn)(void *), void *child_stack, int flags, void *arg,<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h?rev=192695&r1=192694&r2=192695&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h?rev=192695&r1=192694&r2=192695&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h Tue Oct 15 07:57:59 2013<br>
@@ -222,6 +222,20 @@ namespace __sanitizer {<br>
 #endif<br>
   };<br>
<br>
+  struct __sanitizer_kernel_sigset_t {<br>
+    u8 sig[8];<br>
+  };<br>
+<br>
+  struct __sanitizer_kernel_sigaction_t {<br>
+    union {<br>
+      void (*sigaction)(int signo, void *info, void *ctx);<br>
+      void (*handler)(int signo);<br>
+    };<br>
+    unsigned long sa_flags;<br>
+    void (*sa_restorer)(void);<br>
+    __sanitizer_kernel_sigset_t sa_mask;<br>
+  };<br>
+<br>
   extern uptr sig_ign;<br>
   extern uptr sig_dfl;<br>
   extern uptr sa_siginfo;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc?rev=192695&r1=192694&r2=192695&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc?rev=192695&r1=192694&r2=192695&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc Tue Oct 15 07:57:59 2013<br>
@@ -18,6 +18,8 @@<br>
<br>
 #include "sanitizer_stoptheworld.h"<br>
<br>
+#include "sanitizer_platform_limits_posix.h"<br>
+<br>
 #include <errno.h><br>
 #include <sched.h> // for CLONE_* definitions<br>
 #include <stddef.h><br>
@@ -31,6 +33,14 @@<br>
 #endif<br>
 #include <sys/wait.h> // for signal-related stuff<br>
<br>
+#ifdef sa_handler<br>
+# undef sa_handler<br>
+#endif<br>
+<br>
+#ifdef sa_sigaction<br>
+# undef sa_sigaction<br>
+#endif<br>
+<br>
 #include "sanitizer_common.h"<br>
 #include "sanitizer_libc.h"<br>
 #include "sanitizer_linux.h"<br>
@@ -178,7 +188,7 @@ struct TracerThreadArgument {<br>
 static DieCallbackType old_die_callback;<br>
<br>
 // Signal handler to wake up suspended threads when the tracer thread dies.<br>
-void TracerThreadSignalHandler(int signum, siginfo_t *siginfo, void *) {<br>
+void TracerThreadSignalHandler(int signum, void *siginfo, void *) {<br>
   if (thread_suspender_instance != NULL) {<br>
     if (signum == SIGABRT)<br>
       thread_suspender_instance->KillAllThreads();<br>
@@ -236,7 +246,7 @@ static int TracerThread(void* argument)<br>
   // the mask we inherited from the caller thread.<br>
   for (uptr signal_index = 0; signal_index < ARRAY_SIZE(kUnblockedSignals);<br>
        signal_index++) {<br>
-    kernel_sigaction_t new_sigaction;<br>
+    __sanitizer_kernel_sigaction_t new_sigaction;<br>
     internal_memset(&new_sigaction, 0, sizeof(new_sigaction));<br>
     new_sigaction.sigaction = TracerThreadSignalHandler;<br>
     new_sigaction.sa_flags = SA_ONSTACK | SA_SIGINFO;<br>
@@ -286,9 +296,10 @@ class ScopedStackSpaceWithGuard {<br>
<br>
 // We have a limitation on the stack frame size, so some stuff had to be moved<br>
 // into globals.<br>
-static kernel_sigset_t blocked_sigset;<br>
-static kernel_sigset_t old_sigset;<br>
-static kernel_sigaction_t old_sigactions[ARRAY_SIZE(kUnblockedSignals)];<br>
+static __sanitizer_kernel_sigset_t blocked_sigset;<br>
+static __sanitizer_kernel_sigset_t old_sigset;<br>
+static __sanitizer_kernel_sigaction_t old_sigactions<br>
+    [ARRAY_SIZE(kUnblockedSignals)];<br>
<br>
 class StopTheWorldScope {<br>
  public:<br>
@@ -304,7 +315,7 @@ class StopTheWorldScope {<br>
       // Remove the signal from the set of blocked signals.<br>
       internal_sigdelset(&blocked_sigset, kUnblockedSignals[signal_index]);<br>
       // Install the default handler.<br>
-      kernel_sigaction_t new_sigaction;<br>
+      __sanitizer_kernel_sigaction_t new_sigaction;<br>
       internal_memset(&new_sigaction, 0, sizeof(new_sigaction));<br>
       new_sigaction.handler = SIG_DFL;<br>
       internal_sigfillset(&new_sigaction.sa_mask);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>