[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

Chad Rosier mcrosier at apple.com
Tue Jan 10 15:36:33 PST 2012


It's 10.6.8, which is Snow Leopard.

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/62a116d7/attachment.html>


More information about the llvm-commits mailing list