[llvm-commits] [compiler-rt] r147878 - in /compiler-rt/trunk/lib/asan: asan_interceptors.cc asan_linux.cc asan_lock.h asan_mac.cc asan_thread_registry.cc

Kostya Serebryany kcc at google.com
Tue Jan 10 15:37:12 PST 2012


On Tue, Jan 10, 2012 at 3:36 PM, Chad Rosier <mcrosier at apple.com> wrote:

> It's 10.6.8, which is Snow Leopard.
>

Ah, so it's the other way around. The box I am testing on is 10.8.0.
I'll have a fix shortly.

--kcc


>
> On Jan 10, 2012, at 3:27 PM, Kostya Serebryany wrote:
>
> OMG. Looking...
> Which version of MAcOS is that?
> I am, sure I've tested it on MacOS 10.6.
>
> --kcc
>
> On Tue, Jan 10, 2012 at 3:26 PM, Chad Rosier <mcrosier at apple.com> wrote:
>
>> Hi Kostya,
>> I believe we're seeing failures on our internal buildbots due to this
>> commit.  Clang is failing to build due to the following error:
>>
>> /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin10-gcc42-RA/llvm/projects/compiler-rt/lib/asan/asan_interceptors.cc:226:5: error: conflicting types for 'pthread_create'
>> int pthread_create(void *thread, const void *attr,
>>     ^
>> /usr/include/pthread.h:298:11: note: previous declaration is here
>> int       pthread_create(pthread_t * __restrict,
>>           ^
>> 1 error generated.
>>
>>  Chad
>>
>> On Jan 10, 2012, at 1:24 PM, Kostya Serebryany wrote:
>>
>> Author: kcc
>> Date: Tue Jan 10 15:24:40 2012
>> New Revision: 147878
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=147878&view=rev
>> Log:
>> [asan] move OS-dependent code away from asan_lock.h
>>
>> Modified:
>>    compiler-rt/trunk/lib/asan/asan_interceptors.cc
>>    compiler-rt/trunk/lib/asan/asan_linux.cc
>>    compiler-rt/trunk/lib/asan/asan_lock.h
>>    compiler-rt/trunk/lib/asan/asan_mac.cc
>>    compiler-rt/trunk/lib/asan/asan_thread_registry.cc
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=147878&r1=147877&r2=147878&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Tue Jan 10 15:24:40
>> 2012
>> @@ -35,7 +35,7 @@
>> typedef longjmp_f _longjmp_f;
>> typedef longjmp_f siglongjmp_f;
>> typedef void (*__cxa_throw_f)(void *, void *, void *);
>> -typedef int (*pthread_create_f)(pthread_t *thread, const pthread_attr_t
>> *attr,
>> +typedef int (*pthread_create_f)(void *thread, const void *attr,
>>                                 void *(*start_routine) (void *), void
>> *arg);
>> #ifdef __APPLE__
>> dispatch_async_f_f real_dispatch_async_f;
>> @@ -223,10 +223,13 @@
>> }
>>
>> extern "C"
>> +int pthread_create(void *thread, const void *attr,
>> +                   void *(*start_routine) (void *), void *arg);
>> +extern "C"
>> #ifndef __APPLE__
>> __attribute__((visibility("default")))
>> #endif
>> -int WRAP(pthread_create)(pthread_t *thread, const pthread_attr_t *attr,
>> +int WRAP(pthread_create)(void *thread, const void *attr,
>>                          void *(*start_routine) (void *), void *arg) {
>>   GET_STACK_TRACE_HERE(kStackTraceMax, /*fast_unwind*/false);
>>   AsanThread *curr_thread = asanThreadRegistry().GetCurrent();
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_linux.cc?rev=147878&r1=147877&r2=147878&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_linux.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_linux.cc Tue Jan 10 15:24:40 2012
>> @@ -15,6 +15,7 @@
>>
>> #include "asan_interceptors.h"
>> #include "asan_internal.h"
>> +#include "asan_lock.h"
>> #include "asan_procmaps.h"
>> #include "asan_thread.h"
>>
>> @@ -276,6 +277,26 @@
>>   CHECK(AddrIsInStack((uintptr_t)&attr));
>> }
>>
>> +AsanLock::AsanLock(LinkerInitialized) {
>> +  // We assume that pthread_mutex_t initialized to all zeroes is a valid
>> +  // unlocked mutex. We can not use PTHREAD_MUTEX_INITIALIZER as it
>> triggers
>> +  // a gcc warning:
>> +  // extended initializer lists only available with -std=c++0x or
>> -std=gnu++0x
>> +}
>> +
>> +void AsanLock::Lock() {
>> +  CHECK(sizeof(pthread_mutex_t) <= sizeof(opaque_storage_));
>> +  pthread_mutex_lock((pthread_mutex_t*)&opaque_storage_);
>> +  CHECK(!owner_);
>> +  owner_ = (uintptr_t)pthread_self();
>> +}
>> +
>> +void AsanLock::Unlock() {
>> +  CHECK(owner_ == (uintptr_t)pthread_self());
>> +  owner_ = 0;
>> +  pthread_mutex_unlock((pthread_mutex_t*)&opaque_storage_);
>> +}
>> +
>> }  // namespace __asan
>>
>> #endif  // __linux__
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_lock.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_lock.h?rev=147878&r1=147877&r2=147878&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_lock.h (original)
>> +++ compiler-rt/trunk/lib/asan/asan_lock.h Tue Jan 10 15:24:40 2012
>> @@ -19,70 +19,21 @@
>> // The locks in ASan are global objects and they are never destroyed to
>> avoid
>> // at-exit races (that is, a lock is being used by other threads while
>> the main
>> // thread is doing atexit destructors).
>> +// We define the class using opaque storage to avoid including system
>> headers.
>>
>> -#ifdef __APPLE__
>> -#include <pthread.h>
>> -
>> -#include <libkern/OSAtomic.h>
>> namespace __asan {
>> -class AsanLock {
>> - public:
>> -  explicit AsanLock(LinkerInitialized) :
>> -    mu_(OS_SPINLOCK_INIT),
>> -    owner_(0),
>> -    is_locked_(false) {}
>>
>> -  void Lock() {
>> -    CHECK(owner_ != pthread_self());
>> -    OSSpinLockLock(&mu_);
>> -    is_locked_ = true;
>> -    owner_ = pthread_self();
>> -  }
>> -  void Unlock() {
>> -    owner_ = 0;
>> -    is_locked_ = false;
>> -    OSSpinLockUnlock(&mu_);
>> -  }
>> -
>> -  bool IsLocked() {
>> -    // This is not atomic, e.g. one thread may get different values if
>> another
>> -    // one is about to release the lock.
>> -    return is_locked_;
>> -  }
>> - private:
>> -  OSSpinLock mu_;
>> -  volatile pthread_t owner_;  // for debugging purposes
>> -  bool is_locked_;  // for silly malloc_introspection_t interface
>> -};
>> -}  // namespace __asan
>> -
>> -#else  // assume linux
>> -#include <pthread.h>
>> -namespace __asan {
>> class AsanLock {
>>  public:
>> -  explicit AsanLock(LinkerInitialized) {
>> -    // We assume that pthread_mutex_t initialized to all zeroes is a
>> valid
>> -    // unlocked mutex. We can not use PTHREAD_MUTEX_INITIALIZER as it
>> triggers
>> -    // a gcc warning:
>> -    // extended initializer lists only available with -std=c++0x or
>> -std=gnu++0x
>> -  }
>> -  void Lock() {
>> -    pthread_mutex_lock(&mu_);
>> -    // pthread_spin_lock(&mu_);
>> -  }
>> -  void Unlock() {
>> -    pthread_mutex_unlock(&mu_);
>> -    // pthread_spin_unlock(&mu_);
>> -  }
>> +  explicit AsanLock(LinkerInitialized);
>> +  void Lock();
>> +  void Unlock();
>> +  bool IsLocked() { return owner_ != 0; }
>>  private:
>> -  pthread_mutex_t mu_;
>> -  // pthread_spinlock_t mu_;
>> +  uintptr_t opaque_storage_[10];
>> +  uintptr_t owner_;  // for debugging and for malloc_introspection_t
>> interface
>> };
>> -}  // namespace __asan
>> -#endif
>>
>> -namespace __asan {
>> class ScopedLock {
>>  public:
>>   explicit ScopedLock(AsanLock *mu) : mu_(mu) {
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_mac.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_mac.cc?rev=147878&r1=147877&r2=147878&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_mac.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_mac.cc Tue Jan 10 15:24:40 2012
>> @@ -27,6 +27,7 @@
>> #include <pthread.h>
>> #include <fcntl.h>
>> #include <unistd.h>
>> +#include <libkern/OSAtomic.h>
>>
>> namespace __asan {
>>
>> @@ -130,6 +131,27 @@
>>   CHECK(AddrIsInStack((uintptr_t)&local));
>> }
>>
>> +
>> +AsanLock::AsanLock(LinkerInitialized) {
>> +  // We assume that OS_SPINLOCK_INIT is zero
>> +}
>> +
>> +void AsanLock::Lock() {
>> +  CHECK(sizeof(OSSpinLock) <= sizeof(opaque_storage_));
>> +  CHECK(OS_SPINLOCK_INIT == 0);
>> +  CHECK(owner_ != (uintptr_t)pthread_self());
>> +  OSSpinLockLock((OSSpinLock*)&opaque_storage_);
>> +  CHECK(!owner_);
>> +  owner_ = (uintptr_t)pthread_self();
>> +}
>> +
>> +void AsanLock::Unlock() {
>> +  CHECK(owner_ == (uintptr_t)pthread_self());
>> +  owner_ = 0;
>> +  OSSpinLockUnlock((OSSpinLock*)&opaque_storage_);
>> +}
>> +
>> +
>> // Support for the following functions from libdispatch on Mac OS:
>> //   dispatch_async_f()
>> //   dispatch_async()
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_thread_registry.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread_registry.cc?rev=147878&r1=147877&r2=147878&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/asan/asan_thread_registry.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_thread_registry.cc Tue Jan 10
>> 15:24:40 2012
>> @@ -18,6 +18,7 @@
>> #include "asan_thread_registry.h"
>>
>> #include <limits.h>
>> +#include <pthread.h>
>>
>> namespace __asan {
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120110/2565c1c9/attachment.html>


More information about the llvm-commits mailing list