<div dir="ltr"><div class="gmail_default" style>Looks like you need at least glibc 2.12. Which version do you have?</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jan 20, 2013 at 2:59 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Jan 17, 2013 at 5:38 AM, Kostya Serebryany <<a href="mailto:kcc@google.com">kcc@google.com</a>> wrote:<br>

> Author: kcc<br>
> Date: Thu Jan 17 07:38:16 2013<br>
> New Revision: 172719<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=172719&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=172719&view=rev</a><br>
> Log:<br>
> [tsan] move prctl interceptor from asan to common_interceptors thus enabling it for tsan too<br>
><br>
> Modified:<br>
>     compiler-rt/trunk/lib/asan/asan_intercepted_functions.h<br>
>     compiler-rt/trunk/lib/asan/asan_interceptors.cc<br>
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h<br>
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h<br>
>     compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc<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_intercepted_functions.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_intercepted_functions.h?rev=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_intercepted_functions.h?rev=172719&r1=172718&r2=172719&view=diff</a><br>

> ==============================================================================<br>
> --- compiler-rt/trunk/lib/asan/asan_intercepted_functions.h (original)<br>
> +++ compiler-rt/trunk/lib/asan/asan_intercepted_functions.h Thu Jan 17 07:38:16 2013<br>
> @@ -42,10 +42,8 @@<br>
><br>
>  #if defined(__linux__)<br>
>  # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 1<br>
> -# define ASAN_INTERCEPT_PRCTL 1<br>
>  #else<br>
>  # define ASAN_USE_ALIAS_ATTRIBUTE_FOR_INDEX 0<br>
> -# define ASAN_INTERCEPT_PRCTL 0<br>
>  #endif<br>
><br>
>  #if !defined(__APPLE__)<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=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=172719&r1=172718&r2=172719&view=diff</a><br>

> ==============================================================================<br>
> --- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)<br>
> +++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Thu Jan 17 07:38:16 2013<br>
> @@ -75,6 +75,12 @@<br>
>    return internal_strnlen(s, maxlen);<br>
>  }<br>
><br>
> +static void SetThreadName(const char *name) {<br>
> +  AsanThread *t = asanThreadRegistry().GetCurrent();<br>
> +  if (t)<br>
> +    t->summary()->set_name(name);<br>
> +}<br>
> +<br>
>  }  // namespace __asan<br>
><br>
>  // ---------------------- Wrappers ---------------- {{{1<br>
> @@ -83,8 +89,9 @@<br>
>  #define COMMON_INTERCEPTOR_WRITE_RANGE(ptr, size) ASAN_WRITE_RANGE(ptr, size)<br>
>  #define COMMON_INTERCEPTOR_READ_RANGE(ptr, size) ASAN_READ_RANGE(ptr, size)<br>
>  #define COMMON_INTERCEPTOR_ENTER(func, ...) ENSURE_ASAN_INITED()<br>
> -#define COMMON_INTERCEPTOR_FD_ACQUIRE(fd)<br>
> -#define COMMON_INTERCEPTOR_FD_RELEASE(fd)<br>
> +#define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) do { } while (false)<br>
> +#define COMMON_INTERCEPTOR_FD_RELEASE(fd) do { } while (false)<br>
> +#define COMMON_INTERCEPTOR_SET_THREAD_NAME(name) SetThreadName(name)<br>
>  #include "sanitizer_common/sanitizer_common_interceptors.h"<br>
><br>
>  static thread_return_t THREAD_CALLING_CONV asan_thread_start(void *arg) {<br>
> @@ -166,25 +173,6 @@<br>
>  }<br>
>  #endif<br>
><br>
> -#if ASAN_INTERCEPT_PRCTL<br>
> -#define PR_SET_NAME 15<br>
> -INTERCEPTOR(int, prctl, int option,<br>
> -            unsigned long arg2, unsigned long arg3,  // NOLINT<br>
> -            unsigned long arg4, unsigned long arg5) {  // NOLINT<br>
> -  int res = REAL(prctl(option, arg2, arg3, arg4, arg5));<br>
> -  if (option == PR_SET_NAME) {<br>
> -    AsanThread *t = asanThreadRegistry().GetCurrent();<br>
> -    if (t) {<br>
> -      char buff[17];<br>
> -      internal_strncpy(buff, (char*)arg2, 16);<br>
> -      buff[16] = 0;<br>
> -      t->summary()->set_name(buff);<br>
> -    }<br>
> -  }<br>
> -  return res;<br>
> -}<br>
> -#endif<br>
> -<br>
>  #if ASAN_INTERCEPT___CXA_THROW<br>
>  INTERCEPTOR(void, __cxa_throw, void *a, void *b, void *c) {<br>
>    CHECK(REAL(__cxa_throw));<br>
> @@ -731,9 +719,6 @@<br>
>  #if ASAN_INTERCEPT_SIGLONGJMP<br>
>    ASAN_INTERCEPT_FUNC(siglongjmp);<br>
>  #endif<br>
> -#if ASAN_INTERCEPT_PRCTL<br>
> -  ASAN_INTERCEPT_FUNC(prctl);<br>
> -#endif<br>
><br>
>    // Intercept exception handling functions.<br>
>  #if ASAN_INTERCEPT___CXA_THROW<br>
><br>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h?rev=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h?rev=172719&r1=172718&r2=172719&view=diff</a><br>

> ==============================================================================<br>
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h (original)<br>
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_interceptors.h Thu Jan 17 07:38:16 2013<br>
> @@ -17,6 +17,7 @@<br>
>  //   COMMON_INTERCEPTOR_WRITE_RANGE<br>
>  //   COMMON_INTERCEPTOR_FD_ACQUIRE<br>
>  //   COMMON_INTERCEPTOR_FD_RELEASE<br>
> +//   COMMON_INTERCEPTOR_SET_THREAD_NAME<br>
>  //===----------------------------------------------------------------------===//<br>
>  #ifndef SANITIZER_COMMON_INTERCEPTORS_H<br>
>  #define SANITIZER_COMMON_INTERCEPTORS_H<br>
> @@ -34,6 +35,9 @@<br>
>      COMMON_INTERCEPTOR_FD_ACQUIRE(fd);<br>
>    return res;<br>
>  }<br>
> +# define INIT_READ INTERCEPT_FUNCTION(read)<br>
> +#else<br>
> +# define INIT_READ<br>
>  #endif<br>
><br>
>  #if SANITIZER_INTERCEPT_PREAD<br>
> @@ -46,6 +50,9 @@<br>
>      COMMON_INTERCEPTOR_FD_ACQUIRE(fd);<br>
>    return res;<br>
>  }<br>
> +# define INIT_PREAD INTERCEPT_FUNCTION(pread)<br>
> +#else<br>
> +# define INIT_PREAD<br>
>  #endif<br>
><br>
>  #if SANITIZER_INTERCEPT_PREAD64<br>
> @@ -58,29 +65,35 @@<br>
>      COMMON_INTERCEPTOR_FD_ACQUIRE(fd);<br>
>    return res;<br>
>  }<br>
> -#endif<br>
> -<br>
> -#if SANITIZER_INTERCEPT_READ<br>
> -# define INIT_READ INTERCEPT_FUNCTION(read)<br>
> -#else<br>
> -# define INIT_READ<br>
> -#endif<br>
> -<br>
> -#if SANITIZER_INTERCEPT_PREAD<br>
> -# define INIT_PREAD INTERCEPT_FUNCTION(pread)<br>
> -#else<br>
> -# define INIT_PREAD<br>
> -#endif<br>
> -<br>
> -#if SANITIZER_INTERCEPT_PREAD64<br>
>  # define INIT_PREAD64 INTERCEPT_FUNCTION(pread64)<br>
>  #else<br>
>  # define INIT_PREAD64<br>
>  #endif<br>
><br>
> +#if SANITIZER_INTERCEPT_PRCTL<br>
> +INTERCEPTOR(int, prctl, int option,<br>
> +            unsigned long arg2, unsigned long arg3,  // NOLINT<br>
> +            unsigned long arg4, unsigned long arg5) {  // NOLINT<br>
> +  COMMON_INTERCEPTOR_ENTER(prctl, option, arg2, arg3, arg4, arg5);<br>
> +  static const int PR_SET_NAME = 15;<br>
> +  int res = REAL(prctl(option, arg2, arg3, arg4, arg5));<br>
> +  if (option == PR_SET_NAME) {<br>
> +    char buff[16];<br>
> +    internal_strncpy(buff, (char*)arg2, 15);<br>
> +    buff[15] = 0;<br>
> +    COMMON_INTERCEPTOR_SET_THREAD_NAME(buff);<br>
> +  }<br>
> +  return res;<br>
> +}<br>
> +# define INIT_PRCTL INTERCEPT_FUNCTION(prctl)<br>
> +#else<br>
> +# define INIT_PRCTL<br>
> +#endif  // SANITIZER_INTERCEPT_PRCTL<br>
> +<br>
>  #define SANITIZER_COMMON_INTERCEPTORS_INIT \<br>
>    INIT_READ;                               \<br>
>    INIT_PREAD;                              \<br>
>    INIT_PREAD64;                            \<br>
> +  INIT_PRCTL;                              \<br>
><br>
>  #endif  // SANITIZER_COMMON_INTERCEPTORS_H<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=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_interceptors.h?rev=172719&r1=172718&r2=172719&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 Thu Jan 17 07:38:16 2013<br>
> @@ -24,7 +24,9 @@<br>
><br>
>  #if defined(__linux__) && !defined(ANDROID)<br>
>  # define SANITIZER_INTERCEPT_PREAD64 1<br>
> +# define SANITIZER_INTERCEPT_PRCTL 1<br>
>  #else<br>
> +# define SANITIZER_INTERCEPT_PRCTL 0<br>
>  # define SANITIZER_INTERCEPT_PREAD64 0<br>
>  #endif<br>
><br>
><br>
> Modified: compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc?rev=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc?rev=172719&r1=172718&r2=172719&view=diff</a><br>

> ==============================================================================<br>
> --- compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc (original)<br>
> +++ compiler-rt/trunk/lib/tsan/lit_tests/thread_name.cc Thu Jan 17 07:38:16 2013<br>
> @@ -15,8 +15,7 @@<br>
>  }<br>
><br>
>  void *Thread2(void *x) {<br>
> -  AnnotateThreadName(__FILE__, __LINE__, "Thread2");<br>
> -  // TODO: pthread_setname_np(pthread_self(), "Thread2");<br>
> +  pthread_setname_np(pthread_self(), "Thread2");<br>
<br>
</div></div>This is failing to compile on my system, possible because of an<br>
outdated version of glibc, though I'm not sure:<br>
<br>
/usr/local/google/home/blaikie/Development/llvm/src/projects/compiler-rt/lib/tsan/lit_tests/thread_name.cc:18:3:<br>
error: use of undeclared identifier 'pthread_setname_np'; did you mean<br>
'pthread_getattr_np'?<br>
  pthread_setname_np(pthread_self(), "Thread2");<br>
  ^~~~~~~~~~~~~~~~~~<br>
  pthread_getattr_np<br>
/usr/include/pthread.h:406:12: note: 'pthread_getattr_np' declared here<br>
extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)<br>
           ^<br>
/usr/local/google/home/blaikie/Development/llvm/src/projects/compiler-rt/lib/tsan/lit_tests/thread_name.cc:18:38:<br>
error: cannot initialize a parameter of type 'pthread_attr_t *' with<br>
an lvalue of type 'const char [8]'<br>
  pthread_setname_np(pthread_self(), "Thread2");<br>
                                     ^~~~~~~~~<br>
/usr/include/pthread.h:406:64: note: passing argument to parameter '__attr' here<br>
extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr)<br>
                                                               ^<br>
2 errors generated.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
>    Global--;<br>
>    return NULL;<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=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=172719&r1=172718&r2=172719&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 Thu Jan 17 07:38:16 2013<br>
> @@ -1623,9 +1623,10 @@<br>
>  #define COMMON_INTERCEPTOR_READ_RANGE(ptr, size)  \<br>
>      MemoryAccessRange(thr, pc, (uptr)ptr, size, false)<br>
>  #define COMMON_INTERCEPTOR_ENTER(func, ...) \<br>
> - SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__)<br>
> +  SCOPED_TSAN_INTERCEPTOR(func, __VA_ARGS__)<br>
>  #define COMMON_INTERCEPTOR_FD_ACQUIRE(fd) FdAcquire(thr, pc, fd)<br>
>  #define COMMON_INTERCEPTOR_FD_RELEASE(fd) FdRelease(thr, pc, fd)<br>
> +#define COMMON_INTERCEPTOR_SET_THREAD_NAME(name) ThreadSetName(thr, name)<br>
>  #include "sanitizer_common/sanitizer_common_interceptors.h"<br>
><br>
>  namespace __tsan {<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=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.cc?rev=172719&r1=172718&r2=172719&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 Thu Jan 17 07:38:16 2013<br>
> @@ -204,6 +204,7 @@<br>
>    name[StatInt_pipe]                     = "  pipe                            ";<br>
>    name[StatInt_pipe2]                    = "  pipe2                           ";<br>
>    name[StatInt_read]                     = "  read                            ";<br>
> +  name[StatInt_prctl]                    = "  prctl                           ";<br>
>    name[StatInt_pread]                    = "  pread                           ";<br>
>    name[StatInt_pread64]                  = "  pread64                         ";<br>
>    name[StatInt_readv]                    = "  readv                           ";<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=172719&r1=172718&r2=172719&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_stat.h?rev=172719&r1=172718&r2=172719&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 Thu Jan 17 07:38:16 2013<br>
> @@ -199,6 +199,7 @@<br>
>    StatInt_pipe,<br>
>    StatInt_pipe2,<br>
>    StatInt_read,<br>
> +  StatInt_prctl,<br>
>    StatInt_pread,<br>
>    StatInt_pread64,<br>
>    StatInt_readv,<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>
_______________________________________________<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>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div>