<div dir="ltr">Also, pthread_create() interceptors call pthread_getdetachstate()...</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 7, 2013 at 4:34 PM, Sergey Matveev <span dir="ltr"><<a href="mailto:earthdok@google.com" target="_blank">earthdok@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">We're using pthread_attr_getstack() in sanitizer code! Ouch!<div><br></div><div><div>=================================================================</div>
<div>==31121==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7f0303db7ad8 at pc 0x452cfb bp 0x7f0303db7ab0 sp 0x7f0303db7a88</div>
<div>WRITE of size 8 at 0x7f0303db7ad8 thread T2</div><div>    #0 0x452cfa in __interceptor_pthread_attr_getstack llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:2589</div><div>    #1 0x47d7af in __sanitizer::GetThreadStackTopAndBottom(bool, unsigned long*, unsigned long*) llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc:77                                                                                                                                                                                               #2 0x47dc4d in __sanitizer::GetThreadStackAndTls(bool, unsigned long*, unsigned long*, unsigned long*, unsigned long*) llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc:255                                                                                                                                                                              </div>

<div>    #3 0x474a65 in SetThreadStackAndTls llvm/projects/compiler-rt/lib/asan/asan_thread.cc:184</div><div>    #4 0x474a65 in __asan::AsanThread::Init() llvm/projects/compiler-rt/lib/asan/asan_thread.cc:140</div><div>    #5 0x474caf in __asan::AsanThread::ThreadStart(unsigned long) llvm/projects/compiler-rt/lib/asan/asan_thread.cc:155</div>

<div>    #6 0x7f0313855e99 in start_thread /build/buildd/eglibc-2.15/nptl/pthread_create.c:308</div><div>    #7 0x7f030d5c03fc (/lib/x86_64-linux-gnu/libc.so.6+0xf43fc)</div></div><div><br></div><div>This is breaking several Chrome tests for me, but looks like it could break a lot of other code...</div>

<div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Oct 25, 2013 at 5:01 PM, Evgeniy Stepanov <span dir="ltr"><<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugenis<br>
Date: Fri Oct 25 08:01:31 2013<br>
New Revision: 193405<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=193405&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=193405&view=rev</a><br>
Log:<br>
[sanitizer] Intercept pthread_attr_get*.<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_interceptors.cc<br>
    compiler-rt/trunk/lib/msan/msan_interceptors.cc<br>
    compiler-rt/trunk/lib/msan/tests/CMakeLists.txt<br>
    compiler-rt/trunk/lib/msan/tests/msan_test.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc<br>
    compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Fri Oct 25 08:01:31 2013<br>
@@ -151,8 +151,6 @@ static thread_return_t THREAD_CALLING_CO<br>
 }<br>
<br>
 #if ASAN_INTERCEPT_PTHREAD_CREATE<br>
-extern "C" int pthread_attr_getdetachstate(void *attr, int *v);<br>
-<br>
 INTERCEPTOR(int, pthread_create, void *thread,<br>
     void *attr, void *(*start_routine)(void*), void *arg) {<br>
   EnsureMainThreadIDIsCorrect();<br>
<br>
Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Fri Oct 25 08:01:31 2013<br>
@@ -1040,8 +1040,6 @@ INTERCEPTOR(int, signal, int signo, uptr<br>
<br>
 extern "C" int pthread_attr_init(void *attr);<br>
 extern "C" int pthread_attr_destroy(void *attr);<br>
-extern "C" int pthread_attr_setstacksize(void *attr, uptr stacksize);<br>
-extern "C" int pthread_attr_getstack(void *attr, uptr *stack, uptr *stacksize);<br>
 extern "C" int pthread_setspecific(unsigned key, const void *v);<br>
 extern "C" int pthread_yield();<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/msan/tests/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/msan/tests/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/msan/tests/CMakeLists.txt Fri Oct 25 08:01:31 2013<br>
@@ -51,6 +51,7 @@ set(MSAN_UNITTEST_COMMON_CFLAGS<br>
   -fno-exceptions<br>
   -fno-omit-frame-pointer<br>
   -mno-omit-leaf-frame-pointer<br>
+  -Wno-deprecated-declarations<br>
 )<br>
 set(MSAN_UNITTEST_INSTRUMENTED_CFLAGS<br>
   ${MSAN_UNITTEST_COMMON_CFLAGS}<br>
<br>
Modified: compiler-rt/trunk/lib/msan/tests/msan_test.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/msan_test.cc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/msan/tests/msan_test.cc (original)<br>
+++ compiler-rt/trunk/lib/msan/tests/msan_test.cc Fri Oct 25 08:01:31 2013<br>
@@ -2504,6 +2504,77 @@ TEST(MemorySanitizer, PreAllocatedStackT<br>
   ASSERT_EQ(0, res);<br>
 }<br>
<br>
+TEST(MemorySanitizer, pthread_attr_get) {<br>
+  pthread_attr_t attr;<br>
+  int res;<br>
+  res = pthread_attr_init(&attr);<br>
+  ASSERT_EQ(0, res);<br>
+  {<br>
+    int v;<br>
+    res = pthread_attr_getdetachstate(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    size_t v;<br>
+    res = pthread_attr_getguardsize(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    struct sched_param v;<br>
+    res = pthread_attr_getschedparam(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    int v;<br>
+    res = pthread_attr_getschedpolicy(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    int v;<br>
+    res = pthread_attr_getinheritsched(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    int v;<br>
+    res = pthread_attr_getscope(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    void *v;<br>
+    res = pthread_attr_getstackaddr(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    size_t v;<br>
+    res = pthread_attr_getstacksize(&attr, &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  {<br>
+    void *v;<br>
+    size_t w;<br>
+    res = pthread_attr_getstack(&attr, &v, &w);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+    EXPECT_NOT_POISONED(w);<br>
+  }<br>
+  {<br>
+    cpu_set_t v;<br>
+    res = pthread_attr_getaffinity_np(&attr, sizeof(v), &v);<br>
+    ASSERT_EQ(0, res);<br>
+    EXPECT_NOT_POISONED(v);<br>
+  }<br>
+  res = pthread_attr_destroy(&attr);<br>
+  ASSERT_EQ(0, res);<br>
+}<br>
+<br>
 TEST(MemorySanitizer, pthread_getschedparam) {<br>
   int policy;<br>
   struct sched_param param;<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.inc Fri Oct 25 08:01:31 2013<br>
@@ -2540,6 +2540,79 @@ INTERCEPTOR(int, random_r, void *buf, u3<br>
 #define INIT_RANDOM_R<br>
 #endif<br>
<br>
+#if SANITIZER_INTERCEPT_PTHREAD_ATTR_GET || \<br>
+    SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSSCHED<br>
+#define INTERCEPTOR_PTHREAD_ATTR_GET(what, sz)                      \<br>
+  INTERCEPTOR(int, pthread_attr_get##what, void *attr, void *r) {   \<br>
+    void *ctx;                                                      \<br>
+    COMMON_INTERCEPTOR_ENTER(ctx, pthread_attr_get##what, attr, r); \<br>
+    int res = REAL(pthread_attr_get##what)(attr, r);                \<br>
+    if (!res && r) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, r, sz);      \<br>
+    return res;                                                     \<br>
+  }<br>
+#endif<br>
+<br>
+#if SANITIZER_INTERCEPT_PTHREAD_ATTR_GET<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(detachstate, sizeof(int))<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(guardsize, sizeof(SIZE_T))<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(schedparam, struct_sched_param_sz)<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(schedpolicy, sizeof(int))<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(scope, sizeof(int))<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(stackaddr, sizeof(void *))<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(stacksize, sizeof(SIZE_T))<br>
+INTERCEPTOR(int, pthread_attr_getstack, void *attr, void **addr, SIZE_T *size) {<br>
+  void *ctx;<br>
+  COMMON_INTERCEPTOR_ENTER(ctx, pthread_attr_getstack, attr, addr, size);<br>
+  int res = REAL(pthread_attr_getstack)(attr, addr, size);<br>
+  if (!res) {<br>
+    if (addr) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, addr, sizeof(*addr));<br>
+    if (size) COMMON_INTERCEPTOR_WRITE_RANGE(ctx, size, sizeof(*size));<br>
+  }<br>
+  return res;<br>
+}<br>
+<br>
+#define INIT_PTHREAD_ATTR_GET                       \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getdetachstate);  \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getguardsize);    \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getschedparam);   \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getschedpolicy);  \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getinheritsched); \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getscope);        \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getstackaddr);    \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getstacksize);    \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getstack);        \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getaffinity_np);<br>
+#else<br>
+#define INIT_PTHREAD_ATTR_GET<br>
+#endif<br>
+<br>
+#if SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED<br>
+INTERCEPTOR_PTHREAD_ATTR_GET(inheritsched, sizeof(int))<br>
+<br>
+#define INIT_PTHREAD_ATTR_GETINHERITSCHED \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getinheritsched);<br>
+#else<br>
+#define INIT_PTHREAD_ATTR_GETINHERITSCHED<br>
+#endif<br>
+<br>
+#if SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP<br>
+INTERCEPTOR(int, pthread_attr_getaffinity_np, void *attr, SIZE_T cpusetsize,<br>
+            void *cpuset) {<br>
+  void *ctx;<br>
+  COMMON_INTERCEPTOR_ENTER(ctx, pthread_attr_getaffinity_np, attr, cpusetsize,<br>
+                           cpuset);<br>
+  int res = REAL(pthread_attr_getaffinity_np)(attr, cpusetsize, cpuset);<br>
+  if (!res && cpusetsize && cpuset)<br>
+    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, cpuset, cpusetsize);<br>
+  return res;<br>
+}<br>
+<br>
+#define INIT_PTHREAD_ATTR_GETAFFINITY_NP \<br>
+  INTERCEPT_FUNCTION(pthread_attr_getaffinity_np);<br>
+#else<br>
+#define INIT_PTHREAD_ATTR_GETAFFINITY_NP<br>
+#endif<br>
+<br>
 #define SANITIZER_COMMON_INTERCEPTORS_INIT \<br>
   INIT_STRCMP;                             \<br>
   INIT_STRNCMP;                            \<br>
@@ -2635,4 +2708,7 @@ INTERCEPTOR(int, random_r, void *buf, u3<br>
   INIT_ETHER_R;                            \<br>
   INIT_SHMCTL;                             \<br>
   INIT_RANDOM_R;                           \<br>
+  INIT_PTHREAD_ATTR_GET;                   \<br>
+  INIT_PTHREAD_ATTR_GETINHERITSCHED;       \<br>
+  INIT_PTHREAD_ATTR_GETAFFINITY_NP;        \<br>
 /**/<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h Fri Oct 25 08:01:31 2013<br>
@@ -137,6 +137,10 @@<br>
 # define SANITIZER_INTERCEPT_ETHER_R SI_LINUX_NOT_ANDROID<br>
 # define SANITIZER_INTERCEPT_SHMCTL SI_LINUX_NOT_ANDROID<br>
 # define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID<br>
+# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_NOT_WINDOWS<br>
+# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETINHERITSCHED \<br>
+  SI_MAC || SI_LINUX_NOT_ANDROID<br>
+# define SANITIZER_INTERCEPT_PTHREAD_ATTR_GETAFFINITY_NP SI_LINUX_NOT_ANDROID<br>
<br>
 # define SANITIZER_INTERCEPT__EXIT SI_LINUX<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Fri Oct 25 08:01:31 2013<br>
@@ -43,9 +43,8 @@ struct ucontext_t {<br>
<br>
 extern "C" int pthread_attr_init(void *attr);<br>
 extern "C" int pthread_attr_destroy(void *attr);<br>
-extern "C" int pthread_attr_getdetachstate(void *attr, int *v);<br>
+DECLARE_REAL(int, pthread_attr_getdetachstate, void *, void *)<br>
 extern "C" int pthread_attr_setstacksize(void *attr, uptr stacksize);<br>
-extern "C" int pthread_attr_getstacksize(void *attr, uptr *stacksize);<br>
 extern "C" int pthread_key_create(unsigned *key, void (*destructor)(void* v));<br>
 extern "C" int pthread_setspecific(unsigned key, const void *v);<br>
 extern "C" int pthread_mutexattr_gettype(void *a, int *type);<br>
@@ -881,7 +880,7 @@ TSAN_INTERCEPTOR(int, pthread_create,<br>
     attr = &myattr;<br>
   }<br>
   int detached = 0;<br>
-  pthread_attr_getdetachstate(attr, &detached);<br>
+  REAL(pthread_attr_getdetachstate)(attr, &detached);<br>
   AdjustStackSizeLinux(attr);<br>
<br>
   ThreadParam p;<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc Fri Oct 25 08:01:31 2013<br>
@@ -395,6 +395,17 @@ void StatOutput(u64 *stat) {<br>
   name[StatInt_shmctl]                   = "  shmctl                          ";<br>
   name[StatInt_random_r]                 = "  random_r                        ";<br>
<br>
+  name[StatInt_pthread_attr_getdetachstate]  = "  pthread_addr_getdetachstate     ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getguardsize]    = "  pthread_addr_getguardsize       ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getschedparam]   = "  pthread_addr_getschedparam      ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getschedpolicy]  = "  pthread_addr_getschedpolicy     ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getinheritsched] = "  pthread_addr_getinheritsched    ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getscope]        = "  pthread_addr_getscope           ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getstackaddr]    = "  pthread_addr_getstackaddr       ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getstacksize]    = "  pthread_addr_getstacksize       ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getstack]        = "  pthread_addr_getstack           ";  // NOLINT<br>
+  name[StatInt_pthread_attr_getaffinity_np]  = "  pthread_addr_getaffinity_np     ";  // NOLINT<br>
+<br>
   name[StatAnnotation]                   = "Dynamic annotations               ";<br>
   name[StatAnnotateHappensBefore]        = "  HappensBefore                   ";<br>
   name[StatAnnotateHappensAfter]         = "  HappensAfter                    ";<br>
<br>
Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h?rev=193405&r1=193404&r2=193405&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h?rev=193405&r1=193404&r2=193405&view=diff</a><br>


==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h (original)<br>
+++ compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h Fri Oct 25 08:01:31 2013<br>
@@ -389,6 +389,16 @@ enum StatType {<br>
   StatInt_ether_line,<br>
   StatInt_shmctl,<br>
   StatInt_random_r,<br>
+  StatInt_pthread_attr_getdetachstate,<br>
+  StatInt_pthread_attr_getguardsize,<br>
+  StatInt_pthread_attr_getschedparam,<br>
+  StatInt_pthread_attr_getschedpolicy,<br>
+  StatInt_pthread_attr_getinheritsched,<br>
+  StatInt_pthread_attr_getscope,<br>
+  StatInt_pthread_attr_getstackaddr,<br>
+  StatInt_pthread_attr_getstacksize,<br>
+  StatInt_pthread_attr_getstack,<br>
+  StatInt_pthread_attr_getaffinity_np,<br>
<br>
   // Dynamic annotations.<br>
   StatAnnotation,<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">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></div>
</div></div></blockquote></div><br></div>