# Suppressions for Darwin 9.x / Mac OS X 10.5 Leopard

##----------------------------------------------------------------------##
# Memcheck
##----------------------------------------------------------------------##

{
   mach_msg_trap-1
   Memcheck:Param
   mach_msg(msg.msgh_remote_port)
   fun:mach_msg_trap
   obj:/System/Library/Frameworks/CoreFoundation*
   obj:/System/Library/Frameworks/ApplicationServices*
}

{
   mach_msg_trap-2
   Memcheck:Param
   mach_msg(msg.msgh_remote_port)
   fun:mach_msg_trap
   obj:/System/Library/Frameworks/CoreFoundation*
   obj:/System/Library/Frameworks/CoreServices*
}

{
   mach_msg_trap-3
   Memcheck:Param
   mach_msg(msg.msgh_remote_port)
   fun:mach_msg_trap
   obj:/System/Library/Frameworks/CoreFoundation*
   obj:/System/Library/Frameworks/Carbon*
}

{
   mach_msg_trap-4
   Memcheck:Param
   mach_msg(msg.msgh_remote_port)
   fun:mach_msg_trap
   obj:/System/Library/Frameworks/CoreFoundation*
   obj:/System/Library/Frameworks/CoreFoundation*
}

{
   mach_msg_trap-5
   Memcheck:Param
   mach_msg(msg.msgh_remote_port)
   fun:mach_msg_trap
   obj:/System/Library/Frameworks/CoreFoundation*
   obj:/System/Library/Frameworks/AppKit*
}

{
   macos-Cond-1
   Memcheck:Cond
   fun:GetVariationInfoFromName
   obj:/System/Library/Frameworks/ApplicationServices*
   obj:/System/Library/Frameworks/ApplicationServices*
}

{
   macos-Cond-2
   Memcheck:Cond
   fun:*PMMutex*Lock*
   obj:/System/Library/Frameworks/ApplicationServices*
   obj:/System/Library/Frameworks/ApplicationServices*
}

{
   macos-Cond-3
   Memcheck:Cond
   fun:sseCGSBlendXXXX8888
   obj:/System/Library/Frameworks/ApplicationServices*
   obj:/System/Library/Frameworks/ApplicationServices*
}

{
   macos-Cond-4
   Memcheck:Cond
   fun:*CASettingsStorage*RefreshSettings*
   obj:/System/Library/Frameworks/CoreAudio*
   obj:/System/Library/Frameworks/CoreAudio*
}

{
   macos-Cond-5
   Memcheck:Cond
   fun:gle*
   obj:/System/Library/Frameworks/OpenGL*
   obj:/System/Library/Frameworks/OpenGL*
}

{
   macos-Cond-6
   Memcheck:Cond
   fun:pthread_rwlock_init$UNIX2003
   fun:main
}

# afaict this is legit.  Might be caused by setenv("VAR=")
# where the value string is empty (not sure)
{
   macos-Cond-7
   Memcheck:Cond
   fun:__setenv
   fun:putenv*
}

{
   macos-futimes-1
   Memcheck:Param
   futimes(tvp[1])
   fun:futimes
   obj:/usr/lib/libSystem*
   obj:/usr/lib/libSystem*
}

{
   macos-vsyslog-hole
   Memcheck:Param
   socketcall.sendto(msg)
   fun:sendto$NOCANCEL$UNIX2003
   fun:vsyslog
}

# Still-reachable memory.

# I chopped this one off at libSystem_initializer, there were more frames.
{
   darwin-still-reachable-1
   Memcheck:Leak
   fun:calloc
   fun:dwarf2_unwind_dyld_add_image_hook
   fun:_ZN4dyld19registerAddCallbackEPFvPK11mach_headerlE
   fun:_dyld_register_func_for_add_image
   fun:__keymgr_initializer
   fun:libSystem_initializer
}

# I chopped this one off at libSystem_initializer, there were more frames.
{
   darwin-still-reachable-2
   Memcheck:Leak
   fun:malloc
   fun:get_or_create_key_element
   fun:_keymgr_get_and_lock_processwide_ptr_2
   fun:dwarf2_unwind_dyld_add_image_hook
   fun:_ZN4dyld19registerAddCallbackEPFvPK11mach_headerlE
   fun:_dyld_register_func_for_add_image
   fun:__keymgr_initializer
   fun:libSystem_initializer
}

{
   darwin-still-reachable-3
   Memcheck:Leak
   fun:malloc
   fun:__smakebuf
   fun:__swsetup
   fun:__sfvwrite
   fun:puts
}

# Genuine leaks.
# See https://bugs.kde.org/show_bug.cgi?id=188572 about this;  it's
# unavoidable due to BSD setenv() semantics.
{
   macos-__setenv-leak-see-our-bug-188572
   Memcheck:Leak
   fun:malloc_zone_malloc
   fun:__setenv
   fun:setenv$UNIX2003
}
{
   macos-localeconv-leak
   Memcheck:Leak
   fun:malloc
   fun:localeconv_l
   fun:__vfprintf
   fun:vsnprintf
}

{
   macos-TFontFeatures::TFontFeatures(unsigned long)-uninitialised-stack-val
   Memcheck:Cond
   fun:_ZN13TFontFeaturesC2Em
   fun:_ZNK9TBaseFont12CopyFeaturesEv
}

# Conditional jump or move depends on uninitialised value(s)
#    at 0x4E5CD59: _DPSNextEvent (in /System/Library/Frameworks
#                  /AppKit.framework/Versions/C/AppKit)
#    by 0x4E5BF87: -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]
#                  (in /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit)
#    by 0x4E54F9E: -[NSApplication run] (in /System/Library/Frameworks
#                  /AppKit.framework/Versions/C/AppKit)
#  Uninitialised value was created by a stack allocation
#    at 0x4E5C450: _DPSNextEvent (in /System/Library/Frameworks
#                                    /AppKit.framework/Versions/C/AppKit)
{
   macos-_DPSNextEvent-stack-allocated-uninit
   Memcheck:Cond
   fun:_DPSNextEvent
}


##----------------------------------------------------------------------##
# Helgrind
##----------------------------------------------------------------------##

# These ones were necessary to give no errors on a tiny non-threaded
# program.  I don't know if they're real problems or false positives (njn).

# keymgr seems to deliberately do some bogus actions, and if they are bogus,
# it passes the error codes back to the caller.
{
   __keymgr_initializer lock failed
   Helgrind:PthAPIerror
   fun:pthread_mutex_lock
   fun:_dyld_register_func_for_*_image
   fun:__keymgr_initializer
   fun:libSystem_initializer
}
{
   __keymgr_initializer unlock failed
   Helgrind:PthAPIerror
   fun:pthread_mutex_unlock
   fun:_dyld_register_func_for_*_image
   fun:__keymgr_initializer
   fun:libSystem_initializer
}
{
   __keymgr_initializer bogus unlock
   Helgrind:UnlockBogus
   fun:pthread_mutex_unlock
   fun:_dyld_register_func_for_*_image
   fun:__keymgr_initializer
   fun:libSystem_initializer
}

# These ones were necessary to give no errors on a tiny threaded program.
# I don't know if they're real problems or false positives (njn).

#{
#   helgrind-darwinlibc-nuke-everything-in-dyld
#   Helgrind:Race
#   obj:/usr/lib/dyld
#}

{
   helgrind-darwinlibc-nuke-everything-in-libSystem.B.dylib
   Helgrind:Race
   obj:/usr/lib/libSystem.B.dylib
}

# This would be better as "fun:\?\?\?" but string matching doesn't seem to
# allow escaping meta-chars.
#
# This is very bad .. not only will it hide races in any
# un-identified piece of code, the ??? also matches any 3-char
# function name.
{
   helgrind-darwinlibc-nuke-everything-in-???-(unknown-code)
   Helgrind:Race
   fun:???
}

{
   helgrind-darwinlibc--mythread_wrapper-*thread*start*
   Helgrind:Race
   fun:mythread_wrapper
   fun:*thread*start*
}

{
   helgrind-darwinlibc--pthread_create_WRK-pthread_create
   Helgrind:Race
   fun:pthread_create_WRK
   fun:pthread_create
}


# Thread #9: Bug in libpthread: recursive write lock granted on 
#            mutex/wrlock which does not support recursion
#  at 0x18696: pthread_cond_wait* (hg_intercepts.c:655)
#  by 0x2300B8: pthread_rwlock_wrlock$UNIX2003 (in /usr/lib/libSystem.B.dylib)
#  by 0x18F41: pthread_rwlock_wrlock* (hg_intercepts.c:1177)
#
# no idea what this is about
#
{
   helgrind-darwin9--pthread-rwlock-kludgery
   Helgrind:Misc
   fun:pthread_cond_wait*
   fun:pthread_rwlock_*lock*
   fun:pthread_rwlock_*lock*
}