### this file contains suppressions for valgrind when running
### the gstreamer unit tests
### it might be useful for wider use as well

### syscall suppressions

{
   <clone on Wim's Debian>
   Memcheck:Param
   clone(parent_tidptr)
   fun:clone
   fun:clone
}

{
   <clone on Wim's Debian>
   Memcheck:Param
   clone(child_tidptr)
   fun:clone
   fun:clone
}

{
   <clone on Wim's Debian>
   Memcheck:Param
   clone(tlsinfo)
   fun:clone
   fun:clone
}

### glibc suppressions

{
   <conditional jump on wim's debian 2/2/06>
   Memcheck:Cond
   obj:/lib/ld-2.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.*.so
   fun:_dlerror_run
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_file
}

{
   <Conditional jump>
   Memcheck:Cond
   fun:strlen
   fun:fillin_rpath
   fun:_dl_init_paths
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
   obj:/lib64/ld-2.*.so
   obj:*
   obj:*
}

{
   <Conditional jump>
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
}

{
   <insert a suppression name here>
   Memcheck:Cond
   fun:*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

# glibc does not deallocate thread-local storage

{
   <tls>
   Memcheck:Leak
   fun:calloc
   fun:_dl_allocate_tls
   fun:pthread_create@@*
}

{
   <tls>
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls
}

# I get an extra stack entry on x86/dapper
{
   <tls>
   Memcheck:Leak
   fun:calloc
   obj:/lib/ld-2.3.*.so
   fun:_dl_allocate_tls
   fun:pthread_create@@*
}


{
   <pthread strstr>
   Memcheck:Cond
   fun:strstr
   fun:__pthread_initialize_minimal
   obj:/lib/libpthread-*.so
   obj:/lib/libpthread-*.so
   fun:call_init
   fun:_dl_init
   obj:/lib/ld-*.so
}

# a thread-related free problem in glibc from Edgard
{
   __libc_freeres_rw_acess
   Memcheck:Addr4
   obj:*
   obj:*
   obj:*
   obj:*
   obj:*
   fun:__libc_freeres
}

{
   <a conditional jump on wim's debian>
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
}

# g_module_open-related problems
{
   <started showing up on fc4-quick>
   Memcheck:Addr2
   fun:memcpy
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
   fun:gst_plugin_load_file
   fun:gst_registry_scan_path_level
   fun:gst_registry_scan_path_level
   fun:gst_registry_scan_path_level
   fun:init_post
   fun:g_option_context_parse
   fun:gst_init_check
   fun:gst_init
   fun:gst_check_init
   fun:main
}

{
   <started showing up on fc4-quick>
   Memcheck:Addr4
   fun:memcpy
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
   fun:gst_plugin_load_file
   fun:gst_registry_scan_path_level
   fun:gst_registry_scan_path_level
   fun:gst_registry_scan_path_level
   fun:init_post
   fun:g_option_context_parse
   fun:gst_init_check
   fun:gst_init
   fun:gst_check_init
   fun:main
}

{
   <g_module_open on wim's debian>
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:do_sym
   fun:_dl_sym
   fun:dlsym_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlsym
   fun:g_module_symbol
   fun:g_module_open
   fun:gst_plugin_load_file
}

{
   <g_module_open on wim's debian>
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
   fun:gst_plugin_load_file
}
{
   <g_module_open on wim's debian>
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
   fun:gst_plugin_load_file
   fun:gst_plugin_load_by_name
   fun:gst_plugin_feature_load
}

{
   <leak on wim's debian in g_module_open>
   Memcheck:Leak
   fun:malloc
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
   fun:gst_plugin_load_file
   fun:gst_plugin_load_by_name
}

{
   <invalid read on wim's debian>
   Memcheck:Addr4
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
}

{
   <invalid read on wim's debian>
   Memcheck:Addr4
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
}

{
   <invalid read on wim's debian - 2006-02-02>
   Memcheck:Addr4
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <invalid read on wim's debian - 2006-02-02>
   Memcheck:Addr4
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:dl_open_worker
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   fun:dlopen_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <invalid read on wim's debian - 2006-02-02>
   Memcheck:Addr4
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:do_sym
   fun:_dl_sym
   fun:dlsym_doit
   obj:/lib/ld-2.3.*.so
   fun:_dlerror_run
   fun:dlsym
   fun:g_module_symbol
   fun:g_module_open
}

{
   <futex on Andy's 64-bit ubuntu>
   Memcheck:Param
   futex(uaddr2)
   fun:pthread_once
   obj:/lib/libc-2.3.*.so
   obj:/lib/libc-2.3.*.so
   fun:mbsnrtowcs
   fun:vfprintf
   fun:vsprintf
   fun:sprintf
   obj:/lib/libc-2.3.*.so
   fun:tmpfile
   fun:setup_pipe
   fun:setup_messaging_with_key
   fun:setup_messaging
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   fun:_dl_sym
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlsym
   fun:g_module_symbol
   fun:g_module_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   fun:iconv_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   obj:/lib/i686/cmov/libc-2.7.so
   fun:iconv_open
}

{
   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   fun:iconv_open
}

{
   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libc-2.7.so
   fun:iconv_open
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Cond
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

{
   <suppression for glibc 2.7 on debian>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/i686/cmov/libdl-2.7.so
   fun:dlopen
}

# suppression for a glibc bug:
# http://valgrind.org/docs/manual/faq.html#faq.exit_errors>
{
   <Workaround for a glibc bug>
   Memcheck:Free
   fun:free
   obj:*libc-*.so
   fun:__libc_freeres
   fun:*
   fun:_Exit
}

# same as above, just so it works for tpm on gutsy/x86-64
{
   <workaround glibc bug on gutsy x86-64>
   Memcheck:Free
   fun:free
   fun:free_mem
   fun:__libc_freeres
}

# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4
# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy
{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr1
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr2
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}
{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr4
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr1
   fun:memcpy
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr2
   fun:memcpy
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}
{
   <Invalid read of size 1, 2, 4 on thomas's FC4>
   Memcheck:Addr4
   fun:memcpy
   fun:_dl_signal_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
   fun:g_module_open
}

{
   <Addr8 on Andy's AMD64 ubuntu in dl_open>
   Memcheck:Addr8
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/libc-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   obj:/lib/libdl-2.3.*.so
   obj:/lib/ld-2.3.*.so
}

{
   <Conditional jump on Andy's AMD64 ubuntu>
   Memcheck:Cond
   obj:/lib/ld-2.3.*.so
   obj:/lib/libc-2.3.*.so
   obj:/lib/ld-2.3.*.so
   fun:_dl_open
   obj:/lib/libdl-2.3.*.so
   obj:/lib/ld-2.3.*.so
   obj:/lib/libdl-2.3.*.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_file
   fun:gst_plugin_load_by_name
   fun:gst_plugin_feature_load
}

{
   <Mike's x86 dapper>
   Memcheck:Addr4
   obj:/lib/ld-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libc-2.3.6.so
   obj:/lib/ld-2.3.6.so
   fun:_dl_open
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   fun:dlopen
}

{
   <Mike's x86 dapper>
   Memcheck:Cond
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libc-2.3.6.so
   obj:/lib/ld-2.3.6.so
   fun:_dl_open
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   fun:dlopen
}

{
   <Another dapper one>
   Memcheck:Cond
   obj:/lib/ld-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libc-2.3.6.so
   obj:/lib/ld-2.3.6.so
   fun:_dl_open
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/tls/i686/cmov/libdl-2.3.6.so
   fun:dlopen
}

### glib suppressions
{
   <g_parse_debug_string>
   Memcheck:Cond
   fun:g_parse_debug_string
   obj:/usr/lib*/libglib-2.0.so.*
   fun:g_slice_alloc
   fun:g_slice_alloc0
}

{
   <g_type_init leaks>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_type_init*
   fun:init_pre*
}

{
   <g_type_register_fundamental leaks>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_type_register_fundamental
}

{
   <glib 2.21 static type data>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:type_node_any_new_W
}

{
   <glib 2.21 static type data>
   Memcheck:Leak
   fun:realloc
   fun:g_realloc
   fun:type_node_any_new_W
}

{
   <glib 2.21 static type data>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:g_type_class_ref
}

{
   <glib 2.21 static type data>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:type_add_flags_W
}

{
   <glib 2.21 static type data>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:type_add_flags_W
}

#pthread memleaks

{
   Thread creation leak
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate*
   fun:_dl_allocate*
   fun:__pthread_initialize_minimal
}

{
   Thread management leak
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate*
   fun:_dl_allocate*
   fun:__pthread_*
}

{
   Thread management leak 2
   Memcheck:Leak
   fun:memalign
   fun:_dl_allocate*
   fun:_dl_allocate*
   fun:__pthread_*
}

{
   pthread_create Syscall param write(buf) points to uninitialised byte(s)
   Memcheck:Param
   write(buf)
   fun:pthread_create@@GLIBC_2.2.5
   fun:g_thread_create*

}

# nss_parse_* memleak (used by g_option_context_parse)
{
   nss_parse_* memleak
   Memcheck:Leak
   fun:malloc
   fun:nss_parse_service_list
   fun:__nss_database_lookup
}

# liboil suppressions
{
   <liboil cpu_fault_check_try>
   Memcheck:Value8
   obj:/usr/lib/liboil-0.3.so.0.1.0
   obj:/usr/lib/liboil-0.3.so.0.1.0
   obj:/usr/lib/liboil-0.3.so.0.1.0
   fun:oil_cpu_fault_check_try
   fun:oil_test_check_impl
   fun:oil_class_optimize
   fun:oil_optimize_all
   fun:oil_init
}

{
   <annoying read error inside dlopen stuff on Ubuntu Dapper x86_64>
   Memcheck:Addr8
   obj:/lib/ld-2.3.6.so
}

{
   <Ubuntu Dapper x86_64>
   Memcheck:Param
   futex(uaddr2)
   fun:pthread_once
   obj:/lib/libc-2.3.6.so
   obj:/lib/libc-2.3.6.so
   fun:setlocale
   fun:init_pre
   fun:g_option_context_parse
   fun:gst_init_check
   fun:gst_init
   fun:gst_check_init
   fun:main
}

{
   <Ubuntu Dapper x86_64 dlopen stuff again>
   Memcheck:Cond
   obj:/lib/ld-2.3.6.so
   obj:/lib/ld-2.3.6.so
   fun:_dl_open
   obj:/lib/libdl-2.3.6.so
   obj:/lib/ld-2.3.6.so
   obj:/lib/libdl-2.3.6.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_file
}
# this exists in a bunch of different variations, hence the short tail/trace
{
   <dlopen invalid read of size 4 suppression on tpm's Ubuntu edgy/x86>
   Memcheck:Addr4
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
}
{
   <and the same for 64bit systems>
   Memcheck:Addr8
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
}

# More edgy suppressions (Mike)
{
   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
   Memcheck:Cond
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   fun:dlopen_doit
   obj:/lib/ld-2.4.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
}

{
   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
   Memcheck:Cond
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   fun:dlopen_doit
   obj:/lib/ld-2.4.so
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.1
}

{
   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
   Memcheck:Cond
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   fun:do_sym
   fun:_dl_sym
}

# This one's overly general, but there's zero other information in the stack
# trace - just these five lines!
{
   <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
   Memcheck:Cond
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
   obj:/lib/ld-2.4.so
}

{
   <tls leaks on Edgy/x86>
   Memcheck:Leak
   fun:calloc
   obj:/lib/ld-2.4.so
   fun:_dl_allocate_tls
   fun:pthread_create@@GLIBC_2.1
}

# TLS leaks for feisty/x86
{
   <tls leaks on Feisty/x86>
   Memcheck:Leak
   fun:calloc
   fun:allocate_dtv
   fun:_dl_allocate_tls
   fun:pthread_create@@GLIBC_2.1
}

{
   <libcdio 0.76 leak>
   Memcheck:Leak
   fun:calloc
   obj:/usr/lib/libcdio.so.6.0.1
   fun:cdio_open_am_linux
   obj:/usr/lib/libcdio.so.6.0.1
   fun:cdio_open_am
}

{
   <Addr8 on Jan's AMD64 ubuntu Feisty in dl_open>
   Memcheck:Addr8
   obj:/lib/ld-2.5.so
}

{
   <First of many Alsa errors>
   Memcheck:Cond
   fun:snd_pcm_direct_shm_create_or_connect
   fun:snd_pcm_dsnoop_open
   fun:_snd_pcm_dsnoop_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_plug_open
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_asym_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
}

{
   <alsa error>
   Memcheck:Cond
   fun:snd*_pcm_hw_param_set_near
}

{
   <alsa error>
   Memcheck:Cond
   ...
   fun:snd*_pcm_hw_param_set_near
}

{
   <alsa error>
   Memcheck:Cond
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_close
   obj:/*lib/libasound.so.2.0.0
}
{
   <alsa error>
   Memcheck:Cond
   fun:snd_pcm_direct_shm_create_or_connect
   fun:snd_pcm_dmix_open
   fun:_snd_pcm_dmix_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_softvol_open
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_plug_open
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_asym_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
}
{
   <alsa error>
   Memcheck:Leak
   fun:malloc
   fun:strdup
   fun:snd_dlobj_cache_add
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:snd_pcm_dsnoop_open
   fun:_snd_pcm_dsnoop_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_plug_open
   obj:/*lib/libasound.so.2.0.0
   fun:snd_pcm_open_slave
   fun:_snd_pcm_asym_open
   obj:/*lib/libasound.so.2.0.0
   obj:/*lib/libasound.so.2.0.0
}
# Catch about 15 variations on inserting info into an ALSA
# internal cache
{
   <alsa error>
   Memcheck:Leak
   fun:malloc
   ...
   fun:snd*_dlobj_cache_add
   obj:/*lib*/libasound.so.2.0.0
}

{
   <alsa leak in loading configuration>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:snd_pcm_open_conf
}

{
   <alsa leak snd_config_hook_load>
   Memcheck:Leak
   fun:*alloc
   obj:/*lib*/libasound.so.2.0.0
   ...
   fun:snd_config_hook_load
}

{
   <alsa leak snd_config_update_r>
   Memcheck:Leak
   fun:*alloc
   obj:/*lib*/libasound.so.2.0.0
   ...
   fun:snd_config_update_r
   fun:snd_config_update
}
{
   <alsa leak snd_config_update_r>
   Memcheck:Leak
   fun:*alloc
   fun:strdup
   ...
   fun:snd_config_update_r
   fun:snd_config_update
}
{
   <nss lookup within ALSA>
   Memcheck:Leak
   fun:malloc
   obj:/lib/libc*.so
   fun:__nss_database_lookup
   obj:*
   obj:*
   fun:getgrnam_r
   fun:getgrnam
   fun:snd_pcm_direct_parse_open_conf
}

{
   <libxcb leak on Ubuntu Feisty>
   Memcheck:Leak
   fun:calloc
   fun:_XCBInitDisplayLock
   fun:XOpenDisplay
}

# GConf internal initialisations related to getting the default client.
{
   <Orbit something or other>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_tcval
   obj:/usr/lib/libORBit-2.so.*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:CORBA_ORB_string_to_object
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_get_current_lock_holder
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so.*
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_engine_get_default
}
{
   <gconf internal leak>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_tcval
   obj:*
   fun:PortableServer_POA_servant_to_reference
   fun:*
   fun:*
   fun:*
   fun:gconf_engine_get_default
}
{
   <gconf internal leak>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_tcval
   obj:/usr/lib/libORBit-2.so.*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:CORBA_ORB_string_to_object
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_get_current_lock_holder
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so.*
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_engine_get_default
}
{
   <gconf internal initialisation>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:ORBit_demarshal_value
   fun:*
   fun:ORBit_small_invoke_stub
   fun:ConfigServer_get_default_database
   fun:*
   fun:gconf_engine_get_default
}
{
   <gconf internal init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:*
   fun:IOP_generate_profiles
   fun:ORBit_marshal_object
   fun:ORBit_marshal_value
   fun:*
   fun:ORBit_small_invoke_stub
   fun:ConfigServer_add_client
   fun:*
   fun:*
   fun:gconf_engine_get_default
}
{
   <gconf internal init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_by_tc
   fun:*
   fun:PortableServer_POA_servant_to_reference
   fun:*
   fun:*
   fun:*
   fun:gconf_engine_get_default
}
{
   <gconf internal init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_by_tc
   obj:/usr/lib/libORBit-2.so.*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:CORBA_ORB_string_to_object
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_get_current_lock_holder
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so.*
   obj:/usr/lib/libgconf-2.so.*
   fun:gconf_engine_get_default
}

{
   <insert a suppression name here>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:*
   fun:*
   fun:gconf_activate_server
}

# Some libORBit/bonobo initialisation stuff
{
   <bonobo init>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:ORBit_alloc_string
   fun:CORBA_string_dup
   fun:Bonobo_ActivationEnvValue_set
   fun:bonobo_activation_init_activation_env
   fun:bonobo_activation_orb_init
   fun:bonobo_activation_init
}
{
   <bonobo init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc*
   obj:/usr/lib/libORBit-2.so*
   fun:PortableServer_POA_servant_to_reference
   obj:/usr/lib/libbonobo-2.so*
}
{
   <bonobo init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_tcval
   fun:ORBit_small_allocbuf
   fun:ORBit_adaptor_setup
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_POA_setup_root
   fun:ORBit_init_internals
   fun:CORBA_ORB_init
}
{
   <bonobo init - more recent variant of above>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc_tcval
   fun:ORBit_adaptor_setup
   fun:*
   fun:ORBit_POA_setup_root
   fun:ORBit_init_internals
   fun:CORBA_ORB_init
}
{
   <bonobo init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_allocbuf
   fun:bonobo_activation_init_activation_env
   fun:bonobo_activation_orb_init
   fun:bonobo_activation_init
}

# More GConf stuff from the FC5 buildbot, mostly variations on the
# above stack traces
{
   <incompletely initialised ORBit buffer>
   Memcheck:Param
   writev(vector[...])
   fun:writev
   obj:/usr/lib/libORBit-2.so*
   fun:link_connection_writev
   fun:giop_send_buffer_write
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_small_invoke_stub
   fun:ORBit_small_invoke_stub_n
   fun:ORBit_c_stub_invoke
   fun:ConfigServer_ping
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <gconf init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc*
   obj:/usr/lib/libORBit-2.so*
   fun:PortableServer_POA_servant_to_reference
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <gconf init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:CORBA_ORB_string_to_object
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_get_current_lock_holder
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <gconf init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc*
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:CORBA_ORB_string_to_object
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_get_current_lock_holder
   fun:gconf_activate_server
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <bonobo init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc*
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_demarshal_IOR
   fun:ORBit_demarshal_object
   fun:ORBit_demarshal_value
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_small_invoke_stub
   fun:ORBit_small_invoke_stub_n
   fun:ORBit_c_stub_invoke
   fun:ConfigServer_get_default_database
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <gconf init>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:ORBit_alloc*
   fun:ORBit_small_alloc*
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_OAObject_object_to_objkey
   fun:IOP_generate_profiles
   fun:ORBit_marshal_object
   fun:ORBit_marshal_value
   obj:/usr/lib/libORBit-2.so*
   fun:ORBit_small_invoke_stub
   fun:ORBit_small_invoke_stub_n
   fun:ORBit_c_stub_invoke
   fun:ConfigServer_add_client
   obj:/usr/lib/libgconf-2.so*
   obj:/usr/lib/libgconf-2.so*
   fun:gconf_engine_get_default
}
{
   <GLib caching the home dir>
   Memcheck:Leak
   fun:malloc
   obj:*libc-*.so
   fun:__nss_database_lookup
   obj:*
   obj:*
   fun:getpwnam_r
   obj:/usr/lib*/libglib-2.0.so.*
   fun:g_get_home_dir
}
{
   <GLib caching the user name>
   Memcheck:Leak
   fun:malloc
   obj:*libc-*.so
   fun:__nss_database_lookup
   obj:*
   obj:*
   fun:getpwnam_r
   obj:/usr/lib*/libglib-2.0.so.*
   fun:g_get_user_name
}
{
   <GLib caching the tmp dir>
   Memcheck:Leak
   fun:malloc
   obj:*libc-*.so
   fun:__nss_database_lookup
   obj:*
   obj:*
   fun:getpwnam_r
   obj:/usr/lib*/libglib-2.0.so.*
   fun:g_get_tmp_dir
}

{
   <GLib caching the host name>
   Memcheck:Leak
   fun:malloc
   obj:*libc-*.so
   fun:__nss_database_lookup
   obj:*
   obj:*
   fun:getpwnam_r
   obj:/usr/lib*/libglib-2.0.so.0.*
   fun:g_get_host_name
}


## Some Fontconfig errors.
{
   <First time load of a font - feisty x86_64>
   Memcheck:Leak
   fun:malloc
   fun:FcPatternObjectInsertElt
   fun:FcPatternObjectAddWithBinding
   fun:FcPatternAppend
   fun:FcEndElement
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   fun:XML_ParseBuffer
   fun:FcConfigParseAndLoad
   fun:FcConfigParseAndLoad
   fun:FcParseInclude
   fun:FcEndElement
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   obj:/usr/lib/libexpat.so.*
   fun:XML_ParseBuffer
   fun:FcConfigParseAndLoad
}
{
   <First time load of a font - generic>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:FcInitLoadConfig
}

# Issues with ubuntu Hardy, same crack as for previous ubuntus
{
   <tls leak generic ubuntu hardy x86>
   Memcheck:Leak
   fun:calloc
   obj:*
   fun:_dl_allocate_tls
   fun:pthread_create@@*
   obj:/usr/lib/libgthread*
   fun:g_thread_*
}

# I've made this version generic, so that it covers future modifications
# of library names
{
   <tls leak generic>
   Memcheck:Leak
   fun:calloc
   obj:*
   fun:_dl_allocate_tls
   fun:pthread_create@@*
   fun:g_thread_*
}

# series of invalid read of size 4 in g_module_open for ubuntu
# hardy x86/32bit
{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_*
}

{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_*
}

{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_*
}

{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load_*
}

{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
   fun:gst_plugin_load*
}

{
   <invalid read of size 4 within <g_module_open>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libc-2.7.so
   fun:_dl_sym
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libdl-2.7.so
   fun:dlsym
   fun:g_module_symbol
   fun:g_module_open
   fun:gst_plugin_load_*
}

# series of invalid read of size 8 in g_module_open for ubuntu
# hardy x86/64bit
{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlopen
   fun:g_module_open
}

{
   <invalid read of size 8 within <g_module_open>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/libdl-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libdl-2.7.so
   fun:dlsym
   fun:g_module_symbol
   fun:g_module_open
}

{
   <GLib caching>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   fun:__nss_lookup_function
   obj:/lib/tls/i686/cmov/libc-2.7.so
   fun:__nss_passwd_lookup
   fun:getpwnam_r
}

{
   <GLib caching>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   fun:__nss_lookup_function
   obj:/lib/tls/i686/cmov/libc-2.7.so
   fun:__nss_passwd_lookup
   fun:getpwnam_r
}

{
   <GLib caching>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   fun:__nss_lookup_function
   obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
   fun:_nss_compat_getpwnam_r
   fun:getpwnam_r
}

{
   <GLib caching>
   Memcheck:Addr4
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/tls/i686/cmov/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   fun:__nss_lookup_function
   obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
   fun:_nss_compat_getpwnam_r
   fun:getpwnam_r
}

{
   <GLib caching>
   Memcheck:Addr8
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/ld-2.7.so
   obj:/lib/libc-2.7.so
   obj:/lib/ld-2.7.so
   fun:__libc_dlopen_mode
   fun:__nss_lookup_function
   obj:/lib/libc-2.7.so
   fun:getpwnam_r
}

## Leaks in ALSA (variations of leak from snd_config_load1)

{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:snd_config_load1
}
{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}
{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}
{
   <Alsa leak>
   Memcheck:Leak
   fun:calloc
   fun:_snd_config_make
   fun:_snd_config_make_add
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:malloc
   fun:snd1_dlobj_cache_add
   fun:snd_ctl_open_noupdate
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:malloc
   fun:*
   fun:snd1_dlobj_cache_add
   fun:snd_ctl_open_noupdate
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}

{
   <Alsa leak>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:snd_config_load1
}


# The following are leaks of caps that need to be created dynamically
# in the type registration of the plugin (used for pad templates).

{
   <Leak in ogmparsers>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_new_simple
   fun:*
   fun:g_type_class_ref
   fun:gst_element_register
}

{
   <Leak in ogmparsers>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:*
   fun:*
   fun:g_type_class_ref
   fun:gst_element_register
   fun:gst_ogm_parse_plugin_init
   fun:plugin_init
}

{
   <Leak in videotestsrc>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_copy
   fun:gst_video_test_src_base_init
   fun:g_type_class_ref
   fun:gst_element_register
}

{
   <Leak in videotestsrc>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_copy
   fun:gst_video_test_src_getcaps
   fun:gst_video_test_src_base_init
   fun:g_type_class_ref
   fun:gst_element_register
}

{
   <Leak in ffmpegcolorspace>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_ffmpegcsp_codectype_to_caps
   fun:gst_ffmpegcolorspace_register
   fun:plugin_init
}

{
   <Leak in ffmpegocolorspace>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_copy
   fun:gst_ffmpegcolorspace_register
   fun:plugin_init
}

{
   <Leak in gstffmpegdemux>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_new_any
   fun:gst_ffmpegdemux_register
   fun:plugin_init
}

{
   <Leak in GstAudioFilter subclasses>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}

{
   <Leak in GstAudioFilter subclasses, variant>
   Memcheck:Leak
   fun:realloc
   fun:g_realloc
   fun:g_ptr_array_maybe_expand
   fun:g_ptr_array_add
   fun:gst_caps_append
   fun:gst_audio_filter_class_add_pad_templates
}

{
   <Leak in GstAudioFilter subclasses, variant>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:g_ptr_array_maybe_expand
   fun:g_ptr_array_add
   fun:gst_caps_append
   fun:gst_audio_filter_class_add_pad_templates
}

{
   <Leak in GstAudioFilter subclasses, variant>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:g_ptr_array_maybe_expand
   fun:g_ptr_array_add
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}

{
   <Leak in GstAudioFilter subclasses, variant2>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_ptr_array_sized_new
   fun:gst_caps_new_empty
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}
{
   <Leak in GstAudioFilter subclasses, variant3>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:g_array_maybe_expand
   fun:g_array_sized_new
   fun:*
   fun:*
   fun:*
   fun:gst_value_init_and_copy
   fun:gst_structure_copy
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}
{
   <Leak in GstAudioFilter subclasses, variant4>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:g_array_maybe_expand
   fun:g_array_sized_new
   fun:*
   fun:gst_structure_copy
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}
{
   <Leak in GstAudioFilter subclasses, variant5>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_array_sized_new
   fun:*
   fun:gst_structure_copy
   fun:gst_caps_copy
   fun:gst_audio_filter_class_add_pad_templates
}

{
   <Leak in riff-media>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_riff_create_*_template_caps
}
{
   <Leak in riff-media>
   Memcheck:Leak
   fun:malloc
   fun:realloc
   fun:g_realloc
   fun:*
   fun:*
   fun:*
   fun:gst_structure_copy
   fun:gst_caps_copy
   fun:gst_caps_append
   fun:gst_riff_create_*_template_caps
}
{
   <Leak in riff-media>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_array_sized_new
   fun:*
   fun:gst_structure_copy
   fun:gst_caps_copy
   fun:gst_caps_append
   fun:gst_riff_create_*_template_caps
}

## Leaks in pango (bilboed: gentoo unstable amd64)

{
   <Pango leak - generic>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:pango_layout_get_pixel_extents
}
{
   <insert a suppression name here>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:pango_language_from_string
   fun:pango_language_get_default
   fun:pango_context_init
   fun:g_type_create_instance
   fun:g_object_constructor
   fun:g_object_newv
   fun:g_object_new_valist
   fun:g_object_new
   fun:pango_font_map_create_context
}

{
   <PangoLanguage can never be freed>
   Memcheck:Leak
   fun:calloc
   fun:g_malloc0
   fun:pango_language_from_string
}


## Leak of property_list in gstffmpegcfg.c
## This list is created in gst_ffmpegcsp_init(), called from
## gst_ffmpegenc_register.
{
   <insert a suppression name here>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_datalist_id_set_data_full
   fun:gst_ffmpeg_cfg_init
   fun:gst_ffmpegenc_register
   fun:plugin_init
}
{
   <insert a suppression name here>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:g_datalist_id_set_data_full
   fun:g_param_spec_set_qdata_full
   fun:gst_ffmpeg_cfg_init
   fun:gst_ffmpegenc_register
   fun:plugin_init
}


{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:gst_ffmpeg_cfg_init
   fun:gst_ffmpegenc_register
}

## Leak of GIO module through gnomevfs

{
   <gio leak>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:*
   fun:*
   fun:g_type_create_instance
   fun:*
   fun:*
   fun:*
   fun:*
   fun:g_io_module_new
   fun:g_io_modules_load_all_in_directory
   fun:*
   fun:get_default_vfs
}

## Conditional jump in getaddrinfo (bilboed, gentoo ~amd64, Dec 13 2008)
{
   <Leak of addrinfo in esd>
   Memcheck:Cond
   fun:gaih_inet
   fun:getaddrinfo
}

## Dynamic pad templates in mxfmux
{
   <Dynamic pad templates in mxfmux>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_slice_alloc
   fun:gst_caps_new_empty
   fun:gst_caps_from_string
   fun:mxf_*_init
   fun:plugin_init
}

## We don't know if ffmpeg frees this or not and better pass a copy for safety
{
   <insert a suppression name here>
   Memcheck:Leak
   fun:malloc
   fun:g_malloc
   fun:g_strdup
   fun:gst_ffmpeg_cfg_fill_context
   fun:gst_ffmpegenc_setcaps
   fun:gst_pad_set_caps
}

## Leak/overreads with glibc-2.10

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:do_sym
   fun:dlsym_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlsym
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:do_sym
   fun:dlsym_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlsym
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_relocate_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_check_map_versions
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_check_map_versions
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_map_object*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_map_object*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_check_caller
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_check_caller
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen*
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   obj:/lib*/libc-2.10.*.so
   obj:/lib*/libc-2.10.*.so
   fun:_vgnU_freeres
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   obj:/lib*/libc-2.10.*.so
   obj:/lib*/libc-2.10.*.so
   fun:_vgnU_freeres
}
{
   <glibc-2.10 mysterious invalid free on exit>
   Memcheck:Free
   fun:free
   obj:/lib*/libc-2.10.*.so
   obj:/lib*/libc-2.10.*.so
   fun:_vgnU_freeres
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_fini
   fun:__run_exit_handlers
   fun:exit
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_fini
   fun:__run_exit_handlers
   fun:exit
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_sort_fini
   fun:_dl_fini
   fun:__run_exit_handlers
   fun:exit
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_sort_fini
   fun:_dl_fini
   fun:__run_exit_handlers
   fun:exit
}

# glibc-2.10 dl overreads
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_fixup
   fun:_dl_runtime_resolve
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_fixup
   fun:_dl_runtime_resolve
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_lookup_symbol_x
   fun:_dl_fixup
   fun:_dl_runtime_resolve
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_lookup_symbol_x
   fun:_dl_fixup
   fun:_dl_runtime_resolve
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:call_init
   fun:_dl_init
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_init
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_relocate_object
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_check_map_versions
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_check_map_versions
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_check_map_versions
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_check_map_versions
   fun:_dl_check_all_versions
   fun:version_check_doit
   fun:_dl_receive_error
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:init_tls
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:init_tls
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_map_object_deps
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_protect_relro
   fun:_dl_relocate_object
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_setup_hash
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:open_path
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:open_path
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_name_match_p
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:*
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_name_match_p
   fun:_dl_check_map_versions
   fun:_dl_check_all_versions
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:do_lookup_x
   fun:_dl_lookup_symbol_x
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_name_match_p
   fun:_dl_map_object
   fun:dl_open_worker
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_name_match_p
   fun:_dl_map_object
   fun:dl_open_worker
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_name_match_p
   fun:_dl_map_object
   fun:dl_open_worker
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_name_match_p
   fun:_dl_map_object
   fun:dl_open_worker
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_lookup_symbol_x
   fun:_dl_relocate_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:*
   fun:_dl_check_map_versions
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_check_map_versions
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:*
   fun:_dl_check_map_versions
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_check_map_versions
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:openaux
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_name_match_p
   fun:_dl_map_object
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_close_worker
   fun:_dl_close
   fun:_dl_catch_error
   fun:dlerror_run
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_close_worker
   fun:_dl_close
   fun:_dl_catch_error
   fun:dlerror_run
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_close_worker
   fun:_dl_close
   fun:_dl_catch_error
   fun:dlerror_run
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_close_worker
   fun:_dl_close
   fun:_dl_catch_error
   fun:dlerror_run
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:fillin_rpath
   fun:_dl_init_paths
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:fillin_rpath
   fun:_dl_init_paths
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:fillin_rpath
   fun:_dl_init_paths
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:fillin_rpath
   fun:_dl_init_paths
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_map_object
   fun:map_doit
   fun:_dl_catch_error
   fun:do_preload
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_map_object
   fun:map_doit
   fun:_dl_catch_error
   fun:do_preload
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Param
   open(filename)
   fun:open
   fun:open_verify
   fun:_dl_map_object
   fun:map_doit
   fun:_dl_catch_error
   fun:do_preload
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Param
   stat(file_name)
   fun:_xstat
   fun:open_path
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_map_object_deps
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_map_object_deps
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:*
   fun:_dl_map_object_deps
   fun:dl_main
}

# glibc-2.10 tls issues
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:init_tls
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:init_tls
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:*
   fun:init_tls
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:*
   fun:init_tls
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:_dl_allocate_tls_init
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:_dl_allocate_tls_init
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:*
   fun:_dl_allocate_tls_init
   fun:dl_main
}
{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Value8
   fun:*
   fun:_dl_allocate_tls_init
   fun:dl_main
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Cond
   fun:__tls*
   obj:*
   obj:*
   fun:_vgnU_freeres
}

{
   <glibc-2.10 overreads/conditionals>
   Memcheck:Param
   arch_prctl(arg2)
   fun:init_tls
}
# GLib caching tmp/home directories (glibc-2.10 variants)
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Cond
   fun:*
   fun:dl_open_worker
   fun:*
   fun:*
   fun:*
   fun:_dl_catch_error
   fun:dlerror_run
   fun:*
   fun:__nss_lookup_function
   fun:__nss_lookup
   fun:getpwnam*
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:dl_open_worker
   fun:*
   fun:*
   fun:*
   fun:_dl_catch_error
   fun:dlerror_run
   fun:*
   fun:__nss_lookup_function
   fun:__nss_lookup
   fun:getpwnam*
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Cond
   fun:dl_open_worker
   fun:*
   fun:*
   fun:do_dlopen
   fun:*
   fun:dlerror_run
   fun:*
   fun:__nss_lookup_function
   fun:__nss_lookup
   fun:getpwnam*
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:dl_open_worker
   fun:*
   fun:*
   fun:do_dlopen
   fun:*
   fun:dlerror_run
   fun:*
   fun:__nss_lookup_function
   fun:__nss_lookup
   fun:getpwnam*
}

{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:_dl_add_to_slotinfo
   fun:dl_main
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Param
   open(filename)
   fun:open
   fun:open_verify
   fun:open_path
   fun:_dl_map_object
}



# GModule issues with glibc-2.10
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:*
   fun:dlsym
   fun:g_module_symbol
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:g_module_*
   fun:gst_plugin*
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:g_module_*
   fun:gst_plugin*
}

{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:*
   fun:dlopen*
   fun:g_module_open
}
{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:dlsym
   fun:g_module_symbol
}

{
   <glibc-2.10 GLIB leaks>
   Memcheck:Value8
   fun:*
   fun:*
   fun:*
   fun:*
   fun:*
   fun:dlopen*
   fun:g_module_open
}

# Leak in GSlice
{
   <insert a suppression name here>
   Memcheck:Value8
   fun:g_parse_debug_string
   fun:slice_config_init
   fun:g_slice_init_nomessage
   fun:_g_slice_thread_init_nomessage
   fun:g_thread_init_glib
}

# 2.10 pthread issues
{
   <insert a suppression name here>
   Memcheck:Value8
   fun:__pthread_initialize_minimal
}

# glibc 2.11 conditional
{
   <glibc-2.11 conditional>
   Memcheck:Cond
   fun:_dl_relocate_object
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
   obj:/lib64/ld-2.11.so
}

# glibc 2.11 Leak

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:_dl_*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:_dl_*
   fun:_dl_*
   fun:_dl_*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:_dl_*
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:_dl_map_object
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:_dl_new_object
   fun:_dl_map_object_from_fd
   fun:_dl_map_object
   fun:openaux
   fun:_dl_catch_error
   fun:_dl_map_object_deps
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:_dl_*
   fun:_dl_*
   fun:_dl_*
   fun:dl_open_worker
   fun:_dl_catch_error
   fun:_dl_open
   fun:dlopen_doit
   fun:_dl_catch_error
   fun:_dlerror_run
   fun:dlopen@@GLIBC_2.2.5
}

# glib type leaks
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_type_register_static
}

# new registry system
# all of this will only be created once when loading registry.

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:_priv_gst_registry_chunks_load_plugin
}

# system-wide tags
# these tags are registered once

{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   fun:*
   fun:*
   fun:gst_tag_register
   fun:_gst_tag_initialize
}

# system-wide type classes that we keep referenced

{
   <g_type_class_ref leaks>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_type_class_ref
}

# leaking cached queries which are only initialized once
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:_gst_query_initialize
   fun:init_post
}

# macosx (leopard) library loader leak
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:_Znwm
   fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
   fun:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag
   fun:_ZNSsC2EPKcRKSaIcE
   fun:_Z41__static_initialization_and_destruction_0ii
   fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
}

# GObject type registration
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:_g_atomic_array_copy
}

{
   <getdelim one-time inits called from libselinux>
   Memcheck:Leak
   fun:*alloc
   fun:getdelim
   obj:*libselinux*
}

{
   <weird one when re-reading registry>
   Memcheck:Leak
   fun:*alloc
   ...
   obj:*/sed
}

{
   <weird one when re-reading registry>
   Memcheck:Addr8
   ...
   obj:*/sed
}

# GLib 2.23 interface vtable
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:g_type_add_interface_static
}

{
   <leak in dash on debian sid>
   Memcheck:Leak
   fun:*alloc
   obj:*/dash
}

# libtool/gentoo fake leak
# it actually runs bash and valgrind complains
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:*alloc
   obj:/bin/bash
}

{
   <ignore possbly-lost leaks in the plugin scanner which doesn't clean up properly>
   Memcheck:Leak
   fun:*alloc
   ...
   fun:_gst_plugin_loader_client_run
   fun:main
}

{
   <warning with libc 2.13-2 as in Debian/unstable on amd64>
   Memcheck:Cond
   fun:*strcasecmp*
   ...
   fun:__dcigettext
}

{
   <warning with libc 2.13-2 as in Debian/unstable on amd64>
   Memcheck:Value8
   fun:*strcasecmp*
   ...
   fun:__dcigettext
}

{
   <GstSystemClock is a singleton and does not leak>
   Memcheck:Leak
   fun:malloc
   ...
   fun:gst_poll_new
   fun:gst_poll_new_timer
   fun:gst_system_clock_init
}

{
   <glib types are singletons>
   Memcheck:Leak
   fun:calloc
   ...
   fun:gobject_init_ctor
}

{
   <quark table is leaked on purpose if it grows too big>
   Memcheck:Leak
   fun:malloc
   ...
   fun:g_quark_from*_string
}
