# DRD suppressions for Darwin 10.x / Mac OS X 10.6 Snow Leopard

#
# dyld
#
{
   dyld_mutex_not_locked
   drd:MutexErr
   fun:pthread_mutex_unlock
   fun:_dyld_register_func_for_*_image
}
{
   dyld_mutex_reinitialization
   drd:MutexErr
   fun:pthread_mutex_init
   fun:_Z24dyldGlobalLockInitializev
   fun:_dyld_initializer
}
{
   dyld_stub_binder
   drd:ConflictingAccess
   ...
   fun:_ZN4dyld18fastBindLazySymbolEPP11ImageLoaderm
   fun:dyld_stub_binder
}
{
   dyld ImageLoaderMachOCompressed::findExportedSymbol(char const*, ImageLoader const**) const
   drd:ConflictingAccess
   fun:_ZNK26ImageLoaderMachOCompressed18findExportedSymbolEPKcPPK11ImageLoader
}
{
   dyld dyld::fastBindLazySymbol(ImageLoader**, unsigned long)
   drd:ConflictingAccess
   ...
   fun:_ZN4dyld18fastBindLazySymbolEPP11ImageLoaderm
}
{
   dyld ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&)
   drd:ConflictingAccess
   ...
   fun:_ZN26ImageLoaderMachOCompressed20doBindFastLazySymbolEjRKN11ImageLoader11LinkContextE
}

#
# C library
#
{
   __umodti3
   drd:ConflictingAccess
   fun:__umodti3
}
{
   fork()
   drd:ConflictingAccess
   ...
   fun:_cthread_fork_child
   fun:fork
}
{
   flockfile
   drd:ConflictingAccess
   fun:flockfile
}
{
   funlockfile
   drd:ConflictingAccess
   fun:funlockfile
}
{
   vfprintf_l
   drd:ConflictingAccess
   fun:vfprintf_l
}
{
   localeconv_l
   drd:ConflictingAccess
   fun:localeconv_l
}
{
   __vfprintf
   drd:ConflictingAccess
   fun:__vfprintf
}
{
   fflush
   drd:ConflictingAccess
   fun:fflush
}
{
   cerror
   drd:ConflictingAccess
   ...
   fun:cerror
}
{
   do_rand
   drd:ConflictingAccess
   fun:do_rand
}
{
   mig_dealloc_reply_port
   drd:ConflictingAccess
   fun:mig_dealloc_reply_port
}

#
# pthread library
#
{
   thread_start
   drd:ConflictingAccess
   obj:*
   fun:thread_start
}
{
   pthread_create()
   drd:ConflictingAccess
   ...
   fun:pthread_create
}
{
   drd-darwin-pthread-join-1
   drd:ConflictingAccess
   ...
   fun:pthread_join$UNIX2003
}
{
   drd-darwin-pthread-join-2
   drd:ConflictingAccess
   ...
   fun:pthread_join
   fun:pthread_join
}
{
   _pthread_exit()
   drd:ConflictingAccess
   ...
   fun:_pthread_exit
}
{
   pthread_detach()
   drd:ConflictingAccess
   ...
   fun:pthread_detach
   fun:pthread_detach
}
{
   pthread_kill()
   drd:ConflictingAccess
   ...
   fun:pthread_kill
}
{
   spin_unlock()
   drd:ConflictingAccess
   fun:spin_unlock
}
{
   _pthread_testcancel()
   drd:ConflictingAccess
   fun:_pthread_testcancel
}
