# These three happen if valgrind doesn't notice and handle speculative # implementations of strchr/strlen/strcat properly. { visual_c_ignore_strchr Memcheck:Cond fun:strchr } { visual_c_ignore_strlen Memcheck:Cond fun:strlen } { visual_c_ignore_strcat Memcheck:Cond fun:strcat } # These two are because ioctl often involves structs with holes. # We need to either add one of these per ioctl, or # just make it apply for *any* call to NtFsControlFile. { wine_struct_hole_FILE_PIPE_WAIT_FOR_BUFFER Memcheck:Param writev(vector[1]) obj:* fun:wine_server_call fun:server_ioctl_file fun:NtFsControlFile fun:WaitNamedPipeW } { wine_struct_hole_FILE_PIPE_WAIT_FOR_BUFFER_NONOPTIMIZED Memcheck:Param writev(vector[1]) obj:* fun:send_request fun:wine_server_call fun:server_ioctl_file fun:NtFsControlFile fun:WaitNamedPipeW } # We sure got a lot of these in the logs when I first started. # I suppressed them to avoid dispair. { todo_wine_arrgh_wcstombs Memcheck:Value4 fun:wine_cp_wcstombs } # Now on to system bugs that aren't Wine's fault. { suppress_nss_leak Memcheck:Leak fun:malloc obj:* fun:__nss_database_lookup } { bogus_addr4_ldso_27 Memcheck:Addr4 obj:/lib*/ld-2.7.so } { bogus_addr4_ldso_261 Memcheck:Addr4 obj:/lib*/ld-2.6.1.so } { bogus_addr4_ldso_25 Memcheck:Addr4 obj:/lib*/ld-2.5.so } { bogus_addr4_ldso_236 Memcheck:Addr4 obj:/lib*/ld-2.3.6.so } { bogus_cond_ldso_27 Memcheck:Cond obj:/lib*/ld-2.7.so } { bogus_cond_ldso_261 Memcheck:Cond obj:/lib*/ld-2.6.1.so } { bogus_cond_ldso_25 Memcheck:Cond obj:/lib*/ld-2.5.so } { bogus_cond_ldso_236 Memcheck:Cond obj:/lib*/ld-2.3.6.so } { bogus_cond_libglcore_16912 Memcheck:Cond obj:/usr/lib*/libGLcore.so.169.12 } { bogus_value4_libglcore_16912 Memcheck:Value4 obj:/usr/lib*/libGLcore.so.169.12 } { bogus_addr2_libglcore_16912 Memcheck:Addr2 obj:/usr/lib*/libGLcore.so.169.12 } { bogus_addr4_libgl_109631 Memcheck:Addr4 obj:/usr/lib*/libGL.so.1.0.9631 } { bogus_addr4_libgl_109639 Memcheck:Addr4 obj:/usr/lib*/libGL.so.1.0.9639 } { suppress_leak_libgl_109631 Memcheck:Leak fun:malloc obj:/usr/lib*/libGL.so.1.0.9631 } { bogus_X11_1 Memcheck:Param write(buf) obj:* obj:/usr/lib*/libX11.so.6.2.0 } { bogus_X11_2 Memcheck:Param write(buf) obj:* obj:* obj:/usr/lib*/libX11.so.6.2.0 } { bogus_Xcursor Memcheck:Cond obj:/usr/lib*/libXcursor.so.1.0.2 } { suppress_i915_ioctl Memcheck:Param ioctl(generic) obj:* obj:/usr/lib*/dri/i915_dri.so } { suppress_i915_cond Memcheck:Cond obj:/usr/lib*/dri/i915_dri.so } { suppress_i915_value Memcheck:Value4 obj:/usr/lib*/dri/i915_dri.so } { suppress_i915_leak1 Memcheck:Leak fun:malloc obj:/usr/lib*/dri/i915_dri.so } { suppress_i915_leak2 Memcheck:Leak fun:memalign fun:* obj:/usr/lib*/dri/i915_dri.so } { suppress_libasound_overlap Memcheck:Overlap fun:memcpy obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_connect Memcheck:Param socketcall.connect(serv_addr..sun_path) obj:* obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_connect2 Memcheck:Cond fun:snd_pcm_direct_client_connect obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_bind Memcheck:Param socketcall.bind(my_addr..sun_path) obj:* obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_ioctl Memcheck:Param ioctl(arg) obj:* obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_ioctl2 Memcheck:Param ioctl(arg) obj:* fun:ioctl obj:/usr/lib*/libasound.so.2.0.0 } { suppress_libasound_semctl Memcheck:Param semctl(IPC_SET, arg.buf) obj:* obj:/usr/lib*/libasound.so.2.0.0 } { todo_suppress_libasound_leak Memcheck:Leak fun:* obj:/usr/lib*/libasound.so.2.0.0 } { todo_suppress_libfontconfig_leak Memcheck:Leak fun:malloc obj:/usr/lib*/libfontconfig.so.1.* } # thread_detach() should clean this up?? { todo_wine_dlls_winex11drv__x11drv_init_thread_data_main Memcheck:Leak fun:RtlAllocateHeap fun:x11drv_init_thread_data } # Supposedly there's a call back to X11DRV_DestroyIM at thread destruction time...? # and thread_detach() should also clean it up?? { todo_wine_dlls_winex11drv__x11drv_init_thread_data_xim Memcheck:Leak fun:malloc fun:_XimOpenIM fun:_XimRegisterIMInstantiateCallback fun:XRegisterIMInstantiateCallback fun:X11DRV_SetupXIM fun:x11drv_init_thread_data fun:x11drv_thread_data fun:X11DRV_SetWindowPos } { todo_suppress_alloc_module_leak Memcheck:Leak fun:RtlAllocateHeap fun:RtlCreateUnicodeString fun:alloc_module } { todo_suppress_dlopen_leak Memcheck:Leak fun:malloc obj:* obj:* obj:* obj:* obj:* obj:* obj:* obj:* fun:dlopen } { todo_suppress_load_library_leak Memcheck:Leak fun:RtlAllocateHeap fun:RtlAnsiStringToUnicodeString fun:RtlCreateUnicodeStringFromAsciiz fun:get_load_order } { todo_suppress_wine_init_load_order_leak Memcheck:Leak fun:notify_alloc fun:RtlAllocateHeap fun:RtlAnsiStringToUnicodeString fun:RtlCreateUnicodeStringFromAsciiz fun:init_load_order } # ntdll/loader.c explicitly avoids freeing when .exe's exit at the moment { todo_suppress_wine_alloc_module_leak Memcheck:Leak fun:notify_alloc fun:RtlAllocateHeap fun:RtlCreateUnicodeString fun:alloc_module } { todo_suppress_explorer_leak Memcheck:Leak fun:RtlAllocateHeap fun:load_driver fun:loaderdrv_CreateDesktopWindow fun:WIN_CreateWindowEx fun:CreateWindowExW fun:manage_desktop fun:WinMain fun:main } { todo_suppress_exception_addr4 Memcheck:Addr4 fun:__wine_call_from_32_regs obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so fun:raise_exception } { todo_ignore_bogus_writes_in_req_handler Memcheck:Param writev(vector[1]) obj:* fun:call_req_handler } # See comment in dlls/kernel32/tests/thread.c at end of threadFunc1 { suppress_wine_verify_lstrlenA_deadbeef_zero Memcheck:Addr1 fun:strlen fun:lstrlenA fun:threadFunc1 obj:/home/dank/wine-git/dlls/ntdll/ntdll.dll.so fun:call_thread_func } # test_UnpackDDElParam intentionally passes a bad pointer { suppress_wine_user32_dde_tests Memcheck:Addr2 fun:GlobalLock fun:UnpackDDElParam fun:test_UnpackDDElParam fun:func_dde fun:run_test fun:main } { suppress_gmtime Memcheck:Cond obj:* obj:* fun:gmtime fun:FileTimeToDosDateTime } { suppress_gmtime_r Memcheck:Cond obj:* obj:* fun:gmtime_r fun:FileTimeToDosDateTime } { suppress_if_name2index_glibc_27 Memcheck:Param ioctl(SIOCGIFINDEX) obj:/lib*/ld-2.7.so fun:getInterfaceIndexByName } { suppress_if_nameindex_glibc_23 Memcheck:Param socketcall.sendto(msg) obj:/lib*/ld-2.3.*.so fun:if_nameindex } # Naming convention for Wine suppressions: # If we think it's solid: # suppress_wine_dirname__functionname[_moreifneeded] # If we aren't sure, change suppress to todo { suppress_wine_dlls_kernel32_tests__CreateThread_basic_badaccess Memcheck:Addr1 fun:strlen fun:lstrlenA fun:test_CreateThread_basic } { suppress_wine_dlls_kernel32_IsBadReadPtr Memcheck:Addr1 fun:IsBadReadPtr } { suppress_wine_dlls_kernel32__IsBadWritePtr Memcheck:Addr1 fun:IsBadWritePtr } { suppress_wine_dlls_kernel32_tests__doCrash Memcheck:Addr1 fun:doCrash } # This one is for a jump to zero done intentionally by the crypt32 tests # compiled with -O2, it looks like this? { suppress_wine_dlls_crypt32_tests__test_data_msg_O2 Memcheck:Addr4 fun:__wine_call_from_32_regs fun:CryptMsgUpdate fun:test_data_msg } # compiled with -O0, it looks like this? { suppress_wine_dlls_crypt32_tests__test_data_msg_O0 Memcheck:Jump obj:* fun:CryptMsgUpdate fun:test_data_msg_update fun:test_data_msg } # These two functions test error returned by file read/write with null buffers { suppress_wine_kernel32_tests__test_read_write_nullwrite Memcheck:Param write(buf) obj:/lib*/ld-*.so fun:WriteFile fun:test_read_write fun:func_file fun:run_test fun:main } { suppress_wine_kernel32_tests__test_read_write_nullread Memcheck:Param read(buf) obj:/lib*/ld-*.so fun:ReadFile fun:test_read_write fun:func_file fun:run_test fun:main } # test_SetThreadContext: # The code in question looks like this: #/* simulate a call to set_test_val(10) */ #stack = (int *)ctx.Esp; #stack[-1] = 10; #stack[-2] = ctx.Eip; # So we actually are writing to the stack, just not using 'proper' # access to the stack. { suppress_wine_kernel32_tests__test_SetThreadContext Memcheck:Addr4 fun:test_SetThreadContext fun:func_thread fun:run_test fun:main } # Back to system suppressions that aren't wine's fault # gecko is #1 in the list of offending upstream libraries... { todo_gecko_warnings_r_us Memcheck:Addr4 obj:*wine_gecko* } { todo_gecko_warnings_r_us2 Memcheck:Cond obj:*wine_gecko* } # followed by openssl { todo_openssl_warnings_r_us1a Memcheck:Addr4 obj:/usr/lib*/libcrypto.so* } { todo_openssl_warnings_r_us1b Memcheck:Value4 obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us1c Memcheck:Cond obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us2a Memcheck:Addr4 obj:* obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us2b Memcheck:Value4 obj:* obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us2c Memcheck:Cond obj:* obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us1d Memcheck:Param write(buf) obj:* obj:/usr/lib*/*libcrypto.so* } { todo_openssl_warnings_r_us3a Memcheck:Addr4 obj:/usr/lib*/*libssl.so* } { todo_openssl_warnings_r_us3b Memcheck:Value4 obj:/usr/lib*/*libssl.so* } { todo_openssl_warnings_r_us3c Memcheck:Cond obj:/usr/lib*/*libssl.so* } # And sane { todo_sane_warnings_r_us Memcheck:Addr4 obj:*libsane* } { todo_sane_warnings_r_us2 Memcheck:Cond obj:*libsane* } # and visual C++ 6 { todo_visual_c_chkstk Memcheck:Addr4 fun:$$$00001 } { visual_c_ignore_bad_typeid Memcheck:Cond fun:??0bad_typeid@@QAE@ABV0@@Z }